OK, there are a few things here:
1) Remove the "start" label, and the "goto" - and then forget that "goto" even exists for a couple of years. By then you should know why it's a bad idea, and when to use it. In this case it is completely unnecessary and should not be used. In all my years of coding in C#, I have never once had to use "goto" - and probably neither will you...
2) Why are you using "magic numbers" that will make your application crash if I enter say 4 rows, or 6 columns?
Change this:
int[,] input = new int[3, 3];
To this:
int[,] input = new int[nrows, ncolumns];
3) That really doesn't work at all, does it?
What you want to do is throw away the ReadKey code, and just use ReadLine instead:
for (int row = 0; row < nrows; row++)
{
string inp = Console.ReadLine();
string[] values = inp.Split('\t', ',');
if (values.Length != ncolumns)
{
row--;
continue;
}
for (int column = 0; column < ncolumns; column++)
{
int val;
if (!int.TryParse(values[column], out val))
{
row--;
break;
}
else
{
input[row, column] = val;
}
}
}
That accepts values separated by commas or tabs, or a mixture of the two...