繁体   English   中英

如何在C中使用scanf获取数组中的整数输入?

[英]How to get integer input in an array using scanf in C?

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

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

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

12 345 132 123

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

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

这个说法有什么问题?

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();
}
//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 ) ) { ... }

请注意边界检查。

正如人们一直说的那样,在解析来自正常人类的真实输入时,scanf 不是您的朋友。 它在处理错误情况时存在许多陷阱。

也可以看看:

您的代码没有任何问题。 并且只要输入的整数个数不超过数组的大小,程序就会一直运行,直到输入EOF。 即以下作品:

int main(void)
{
    int array[20] = {0};
    int i=0;
    while(scanf("%d", &array[i++]) == 1);
    return 0;   
}  

正如 BLUEPIXY 所说,您必须为 EOF 输入正确的击键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM