我有一个循环,一旦标志设置为1就会停止。
1 0
1 1
1 2
1 3
每次循环从每行输入扫描2个数字,直到没有剩余的输入行。我认为这样可以正常工作但我在测试以下输入时遇到了问题:
1,0.
1,1.
1,2.
1,3.
输出应为
1,0.
1,1.
1,2.
1,3.
1,3.
但是它会像这样打印最后一个循环两次:
$ python producer.py
为什么在终止之前扫描最后一行两次?是否有一个我可以检查的角色,所以它在打印出第一个" 1,3后会结束。"?
答案 0 :(得分:1)
我会建议类似的东西
int main(){
int next,next1;
scanf("%d", &next);
scanf("%d", &next1);
while (getchar()=='\n') {
printf("%d,%d.\n",next,next1);
scanf("%d", &next);
scanf("%d", &next1);
}
}
通过这种方式,您可以节省一点内存,并且更具可读性。输出现在应该是正确的,请自己尝试。
答案 1 :(得分:0)
scanf()
-
如果在读取时发生读取错误或达到文件结尾,则设置正确的指示符(feof或ferror)。并且,如果在成功读取任何数据之前发生任何一次,则返回EOF。
因此,当输入中没有更多行时,scanf()
返回EOF
和while
循环,因为done
未设置为1
然而,printf()
再次打印存储在next
和next1
中的值。这就是为什么最后输入的值打印两次。在此之后,条件if (getchar()=='\n')
失败并且done
设置为1
并且while
循环退出。
你可以这样做:
int done=0,next,next1;
while (done==0) {
if (scanf("%d%d", &next, &next1) != EOF)
printf("%d,%d.",next,next1);
else
done=1;
}
或者
while (scanf("%d%d", &next, &next1) != EOF)
printf("%d,%d.",next,next1);