gpt4 book ai didi

c - scanf 中的额外/缺失字符

转载 作者:行者123 更新时间:2023-11-30 19:14:25 24 4
gpt4 key购买 nike

这是我的输入函数:

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

它应该打印无效输入。,因为第二个条目有 4 个字符而不是 3 个。同样,如果我写了 2 个字符而不是 3 个,它也应该打印错误消息。

我的尝试背后的想法是,在每次读取字符后,我将该字符写入数组(如果字符被接受),然后x++,以便我可以将下一个输入写入下一个字段。因此,如果我有 4 个字符,而只应接受 3 个字符,则 x 变为 4temp 也变为 44 > 3 所以err=1

那么我的解决方案有什么问题吗?正确的解决方案是什么?提前致谢。

最佳答案

如果您想断言用户在矩阵的每一行的单独行中输入字符,请使用 fgets() 读取一行并手动解析该行,跳过空白字符并适本地处理接受的字符。一旦到达矩阵行的末尾,如果行中剩余非空格字符,则提示。

顺便说一句,如果字符被接受,您应该只增加x。在当前版本中,即使检测到不正确的字符,也会递增 x

关于c - scanf 中的额外/缺失字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com