我有这样的条目:
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
}
在这种情况下,它甚至不会进入。
有谁知道我做错了什么?
答案 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()
成功读取三个值时,让它进入循环,这是预期的。