使用scanf在数组中输入整数

时间:2014-08-05 14:22:15

标签: c scanf

我正在使用scanf获取多个整数输入并将其保存在数组中

while(scanf("%d",&array[i++])==1);

输入整数由空格分隔,例如

12 345 132 123

我在另一篇文章中读到了这个解决方案。

但问题是while循环没有终止。

声明的问题是什么?

4 个答案:

答案 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输入正确的按键。