带有 getchar() 和 EOF 的 C 程序
C Program with getchar() and EOF
为什么我输入EOF(Ctrl-D)时程序会进入死循环?
#include <stdio.h>
main()
{
int c = EOF ;
while(c==EOF)
{
printf("input value c=%d \n",c);
printf("EOF=%d \n",EOF);
c = getchar(); //expect the while loop to pause here and wait for input
}
printf("the value of last input c=%d \n",c);
}
当我输入任何其他字符时,程序会按预期立即退出。
但是当我输入 EOF (Ctrl-D) 时,我希望程序在 while 循环中重复并等待下一个用户使用 getchar 输入。
更新:我阅读了 shell 这个程序运行的手册页
GNU bash 版本 5.0.3(1)-release (x86_64-pc-linux-gnu)
的联机帮助页
Commands for Changing Text
end-of-file (usually C-d)
The character indicating end-of-file as set, for example, by ``stty''. If this character is read
when there are no characters on the line, and point is at the beginning of the line, Readline inter‐
prets it as the end of input and returns EOF.
我认为发生的事情是,当我输入 EOF 作为输入时,shell 不再将输入传递给程序,因此程序只是跳过 c=getchar(); 行。并重复循环。
任何进一步的见解将不胜感激。
Why does the program enter infinite loop when I input EOF (Ctrl-D)?
一旦文件由于 OP 的 CtrlD 而关闭,getchar()
不会等待任何事情,只是 returns EOF
因为设置了 文件结束指示器 。
7.21.7.6 The getchar
function
If the stream is at end-of-file, the end-of-file indicator for the stream is set and getchar
returns EOF
.
要让 getchar()
等待另一个字符,请清除 文件结束指示符 。也许使用 clearerr()
() 清除 error 和 文件结束指示符 .
when I enter EOF as input the shell no longer passes input to program so program just skips the line c=getchar();
我会说 getchar()
,当设置 文件结束指示器 时,不会调用 shell 获取更多数据,并且只是 returns EOF
。详细信息是特定于实现的。
为什么我输入EOF(Ctrl-D)时程序会进入死循环?
#include <stdio.h>
main()
{
int c = EOF ;
while(c==EOF)
{
printf("input value c=%d \n",c);
printf("EOF=%d \n",EOF);
c = getchar(); //expect the while loop to pause here and wait for input
}
printf("the value of last input c=%d \n",c);
}
当我输入任何其他字符时,程序会按预期立即退出。 但是当我输入 EOF (Ctrl-D) 时,我希望程序在 while 循环中重复并等待下一个用户使用 getchar 输入。
更新:我阅读了 shell 这个程序运行的手册页 GNU bash 版本 5.0.3(1)-release (x86_64-pc-linux-gnu)
的联机帮助页Commands for Changing Text
end-of-file (usually C-d)
The character indicating end-of-file as set, for example, by ``stty''. If this character is read
when there are no characters on the line, and point is at the beginning of the line, Readline inter‐
prets it as the end of input and returns EOF.
我认为发生的事情是,当我输入 EOF 作为输入时,shell 不再将输入传递给程序,因此程序只是跳过 c=getchar(); 行。并重复循环。 任何进一步的见解将不胜感激。
Why does the program enter infinite loop when I input EOF (Ctrl-D)?
一旦文件由于 OP 的 CtrlD 而关闭,getchar()
不会等待任何事情,只是 returns EOF
因为设置了 文件结束指示器 。
7.21.7.6 The
getchar
function
If the stream is at end-of-file, the end-of-file indicator for the stream is set andgetchar
returnsEOF
.
要让 getchar()
等待另一个字符,请清除 文件结束指示符 。也许使用 clearerr()
(
when I enter EOF as input the shell no longer passes input to program so program just skips the line c=getchar();
我会说 getchar()
,当设置 文件结束指示器 时,不会调用 shell 获取更多数据,并且只是 returns EOF
。详细信息是特定于实现的。