如何从控制台读取未知数量的整数?

时间:2015-12-03 23:36:30

标签: c input scanf

我有这样的条目:

id

我以前不知道我会收到多少(控制台)输入,所以我必须阅读,直到没有任何条目为止。

我开始使用这样的代码:

0 5 260
1 0 -598
1 5 1508
2 1 -1170

但它永远不会停止要求新的输入。

然后,我看到其他人提出的建议:

int a, b, c;
while(scanf("%d %d %d", &a, &b, &c)!=EOF){
    // do stuff here
}

在这种情况下,它甚至不会进入。

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

方法:继续询问输入,直到输入关闭(EOF)或遇到某些问题。 (无效的输入行)

以下使用fgets()来读取一行。

然后," %n"检测扫描停止的位置。如果扫描未达到%n,则n仍将具有值0.否则,它会在buffer中获得扫描停止的偏移量,希望它处于空字符{{1} }。

'\0'

有很多方法可以解决这个问题。

答案 1 :(得分:0)

while(scanf("%d %d %d", &a, &b, &c)==1)

表示"如果scanf()成功只读取一个值,则继续循环。"

因此,如果您输入0 junk之类的内容,scanf()只会读取1个数据,并且会进入循环一次。

尝试使用

while(scanf("%d %d %d", &a, &b, &c)==3)
scanf()成功读取三个值时,

让它进入循环,这是预期的。