【问题标题】:scanf returns EOF before last input is reached [duplicate]scanf 在到达最后一个输入之前返回 EOF [重复]
【发布时间】:2020-07-10 17:07:09
【问题描述】:

我正在尝试收集数字,直到达到 EOF,然后将数字转换为英文。

$ ./dtoa
22 
twenty two

这是程序的一部分:

int num;
while(scanf("%d", &num) != EOF)
        to_string(num);

问题是,当我输入输入时,然后按 CtrlD 表示 EOF 最后一个数字实际上不会被打印出来:

$ ./dtoa
22 33 44(EOF) twenty two
 thirty three(EOF)
 forty four

我需要按 CtrlD 才能显示最后一个数字。如何修复它以便将完整的输入插入到第一个 EOF 中?

【问题讨论】:

  • 再按几次 ^D 。这是终端的一个属性(在一行中按下它意味着刷新输入,而不是关闭流)

标签: c input scanf eof


【解决方案1】:

要真正发送“一个 EOF”(关闭流),CtrlD 必须在换行符后立即按下。

否则,终端正在发送缓冲字符(与 Enter 相同,但不添加 \n)。

【讨论】:

  • 当我在插入输入后按回车时,程序不给我机会输入 EOF,并立即提交号码。所以在它用数字完成后,程序就终止了,并等待我进入 EOF。
  • @avivgood2 这是预期的:首先,您按Enter 发送输入,该输入由第一个scanf 处理,然后程序再次等待更多输入,此时您按 Ctrl D 终止流,这使得 second scanf 调用返回 EOF
猜你喜欢
  • 1970-01-01
  • 2017-10-21
  • 2020-02-23
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 2012-11-10
相关资源
最近更新 更多