это моя функция ввода:Дополнительные/пропущенные символы в зсапЕ
int input(int array[500][500], int *x0, int *y0) {
int x = 0;
int y = 0;
int err = 0;
int temp = 0;
char c;
char s[2];
printf("Enter sizes:\n");
if (scanf("%d %d%c", x0, y0, &c) !=3 ||
*x0 <= 0 || *y0 <= 0 || *x0 > 500 || *y0 > 500 || c!='\n') {
printf("Invalid input.\n");
return 0;
}
while (y < *y0) {
x = 0;
temp = 0;
while (x < *x0) {
if (scanf("%1s", s)==1) {
c = *s;
} // so that ooo is written into three array fields
switch(c) { // only these three chars are accepted
case 'o':
array[y][x] = 1;
break;
case '.':
array[y][x] = 0;
break;
case '!':
array[y][x] = 2;
break;
default:
err = 1;
break;
}
x++;
temp = x;
if (temp > *x0) // my attempt
err = 1;
}
if (x != *x0)
err = 1;
y++;
}
if (y != *y0)
err = 1;
if (err == 1) {
printf("Invalid input.\n");
return 0;
}
return 1;
}
В принципе, если I вход:
3 3
oooo
ooo
ooo
Он должен печатать Invalid input.
, поскольку вторая запись имеет 4 символов, а не 3. Аналогично, если я написал 2 символа вместо трех, он должен также распечатать сообщение об ошибке.
Мое мышление заключается в том, что после каждого считываемого символа я записываю этот символ в массив (если символы приняты), а затем x++
, поэтому я могу написать следующий ввод в следующее поле. Так что, если у меня есть 4 символа, и только 3 следует принять, x
будет 4
и temp
будет 4
тоже. 4 > 3
so err=1
.
Так что же случилось с моим решением? Какое правильное решение? Заранее спасибо.
Какая часть логики не видна? Сначала я пишу 3 числа, в основном размер матрицы. Затем я пишу матрицу - допускаются только 'o','! 'Или' .'. Если бы я написал, что матрица будет 3x3, и я ввожу строку, которая имеет 4 символа, конечно, это неправильно, и мне нужно уметь распознавать эту ошибку. –
Что происходит, когда scanf не возвращается 1 –
Тогда ничего. scanf не вернет 1, если это не строка. Даже если это была строка, мой переключатель говорит, что если это не один из трех символов, появляется мой флаг ошибки. –