这是我的输入功能:
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;
}
基本上如果我输入:
3 3
oooo
ooo
ooo
它应该打印Invalid input.
,因为第二个条目有4个字符而不是3个。同样,如果我写了2个字符而不是3个,它也应该打印错误信息。
我在尝试背后的想法是,在每次读取char之后,我将该char写入数组(如果接受了字符),然后x++
,那么我可以将下一个输入写入下一个字段。因此,如果我有4个字符且只接受3个字符,则x
变为4
而temp
也变为4
。 4 > 3
所以err=1
。
那么我的解决方案有什么问题?什么是正确的解决方案?提前谢谢。
答案 0 :(得分:1)
如果要断言用户在矩阵的每一行的单独行中输入字符,请使用x
读取一行并手动解析此行,跳过空格字符并适当处理接受的字符。到达矩阵行的末尾后,如果该行中还有非空格字符,则会抱怨。
顺便说一句,如果角色被接受,您只应增加x
。在当前版本中,即使检测到错误的字符,也会增加$scope.submit = function () {
// get object from form data
var formData = { firstName: $scope.firstName, lastName: $scope.lastName, date: getDateFromatted(), posted: false };
addStoredData(formData, ENQUIRY_STORE);
// FIRE UP THE FUNCTION
$scope.enquiries();
}
。