我正在使用scanf获取多个整数输入并将其保存在数组中
while(scanf("%d",&array[i++])==1);
输入整数由空格分隔,例如
12 345 132 123
我在另一篇文章中读到了这个解决方案。
但问题是while循环没有终止。
声明的问题是什么?
答案 0 :(得分:8)
OP正在使用 Enter 或'\n'
来指示输入和空格的结尾作为数字分隔符。 scanf("%d",...
不区分这些空格。在OP的while()
循环中,scanf()
会消耗'\n'
等待额外输入。
相反,请使用fgets()
阅读一行,然后使用sscanf()
,strtol()
等来处理它。 (strtol()
最好,但OP正在使用scanf()
系列)
char buf[100];
if (fgets(buf, sizeof buf, stdin) != NULL) {
char *p = buf;
int n;
while (sscanf(p, "%d %n", &array[i], &n) == 1) {
; // do something with array[i]
i++; // Increment after success @BLUEPIXY
p += n;
}
if (*p != '\0') HandleLeftOverNonNumericInput();
}
答案 1 :(得分:4)
//Better do it in this way
int main()
{
int number,array[20],i=0;
scanf("%d",&number);//Number of scanfs
while(i<number)
scanf("%d",&array[i++]);
return 0;
}
答案 2 :(得分:1)
你应该尝试写下这样的陈述:
while ( ( scanf("%d",&array[i++] ) != -1 ) && ( i < n ) ) { ... }
请注意边界检查。
正如人们一直说的那样,在解析普通人的真实输入时,scanf不是你的朋友。处理错误案件有很多陷阱。
另见:
答案 3 :(得分:0)
您的代码没有任何问题。只要输入的整数数量不超过数组的大小,程序就会运行直到输入EOF。即以下作品:
int main(void)
{
int array[20] = {0};
int i=0;
while(scanf("%d", &array[i++]) == 1);
return 0;
}
正如BLUEPIXY所说,你必须为EOF输入正确的按键。