我正在使用scanf获取多个整数输入,并将其保存在数组中。
while(scanf("%d",&array[i++])==1);
输入的整数通过空格分隔,例如:
12 345 132 123
我在另一个帖子中看到了这个解决方案。
但问题是while循环没有终止。
这个语句有什么问题?
'\ 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();
}
//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;
}
while ( ( scanf("%d",&array[i++] ) != -1 ) && ( i < n ) ) { ... }
你的代码没有任何问题。只要输入的整数数量不超过数组大小,程序就会一直运行,直到输入 EOF 为止。例如:
int main(void)
{
int array[20] = {0};
int i=0;
while(scanf("%d", &array[i++]) == 1);
return 0;
}
正如BLUEPIXY所说,您必须输入正确的EOF按键。
EOF
(ctrl + z
或ctrl + d
) 并按下回车键。 - BLUEPIXY12 345 132 123.
,其中.
表示输入结束标志(当使用scanf
函数时会出现错误)。 - BLUEPIXY