scanf returns 到达最后一个输入之前的 EOF

scanf returns EOF before last input is reached

我正在尝试收集数字,直到达到 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 中?

要实际发送 "an EOF"(关闭流),必须在换行后立即按下 CtrlD

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