提问人:avivgood2 提问时间:3/30/2020 最后编辑:Acornavivgood2 更新时间:3/30/2020 访问量:66
scanf 在到达最后一个输入之前返回 EOF [duplicate]
scanf returns EOF before last input is reached [duplicate]
问:
我正在尝试收集数字,直到达到 EOF,然后将数字转换为英语。
$ ./dtoa
22
twenty two
以下是该计划的一部分:
int num;
while(scanf("%d", &num) != EOF)
to_string(num);
问题是,当我输入输入,然后按EOF时,最后一个数字实际上不会被打印出来:CtrlD
$ ./dtoa
22 33 44(EOF) twenty two
thirty three(EOF)
forty four
我需要按最后一个数字才能显示。如何修复它,以便将完整输入插入到第一个 EOF 中?CtrlD
答:
2赞
Acorn
3/30/2020
#1
要实际发送“EOF”(关闭流),必须在换行符之后按。CtrlD
否则,终端将发送缓冲字符(与 相同,但不添加 )。Enter\n
评论
0赞
avivgood2
3/30/2020
当我在插入输入后按回车键时,程序没有给我输入EOF的机会,并立即提交号码。因此,在它完成程序终止的数字后,等待我进入EOF。
0赞
Acorn
3/30/2020
@avivgood2 这是意料之中的:首先,您按下发送输入,该输入由第一个处理,然后程序再次等待更多输入,然后在那一刻您按下终止流,这使得第二个调用返回。Enter
scanf
Ctrl
D
scanf
EOF
评论