c-逐字符打印stdin,直到文件结束



我们被要求制作一个小程序,使用getchar()打印stdin中的每个字符。。。我原以为下面的代码会起作用,但当我在windows控制台中运行它时,什么都没发生,光标无限期地挂起,好像在等待输入。。。

int c = 0;
while(c != EOF)
{
c = getchar();
printf("%cn", c);
}
printf("nOut of loop!n");

我认为代码会逐字符打印流,如果stdin中没有任何内容,getchar()将返回EOF,循环将停止。。我想我对C语言中的输入方式有些误解,对于初学者来说,这真的很困惑。。。任何帮助!


另一个令人困惑的例子:

char str[100]={0};
printf("Entrer a string: ");
scanf("%s",str); //i'll enter a string with spaces to have something to print in the loop
//let's say i enter Hello Wor^Zld!
int c = 0;
while(c!=EOF)
{
c = getchar();
printf("%c",c);
}
printf("Finally done with loop!!n");


当我运行上面的代码时,我在控制台中得到以下显示:
Wor->
挂着相同的旧光标等待输入。。。知道为什么吗?似乎Ctrl-Z+Enter"^Z-Enter"停止了显示,但循环仍在继续?老实说,我正在尽我所能去理解,但我必须说实话,这很令人困惑。。提前感谢你对我的帮助和宽容!

如果您想要,您应该fflush您的输出。请确保它在您想要的时候打印。在尝试打印您的角色之前,您应该测试EOF

int c;
while((c = getchar()) != EOF)
{
printf("%cn", (char)c);
fflush(stdout);
}
printf("Out of loop!n");

最新更新