为什么没有输出项呢?

img

“control+z”不是文本结束信号吗?当输入control+z的时候,不是退出循环了吗,为什么没有打印键入的字符在屏幕上呢?

你在while循环后面加了个分号,表示如果输入的没有遇到EOF则只做个空循环,putchar放在while循环后面,输入的只是一个最后那个EOF了(可以在putchar()后面用一个printf语句打印ch是多少观察ch最后获取的值)。所以只要把while循环后面的分号去掉即可。修改如下:

#include <stdio.h>

int main(void){
    
    int ch;
    while((ch=getchar())!=EOF)
        putchar(ch);
//    printf("EOF=%d,ch=%d\n",EOF,ch) ;
    
    
    return 0;
} 

img

当输入正常字符时,while循环会一直循环,不会执行putchar;当输入CTRL+Z时,ch是不可见字符,自然看不到输出
如果你是想输入一个就输出一个,那么while循环后面的分号就要删除,不然需要while循环结束才会输出最后一个ch值,但这个ch值是EOF

关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:输出字符串中所有数字