ch2 = getchar()在最后一个输入循环后不起作用((ch = getchar())!= EOF)

时间:2016-07-30 10:07:42

标签: c

#include <stdio.h>
int main(){
    char ch;
    while((ch=getchar())!=EOF){
       putchar(ch);
    }
    char ch2 = 'A';
    printf("ch2=======>%c\n",ch2);
    ch2 = getchar();
    printf("ch2=======>%d\n",ch2);
    return 0;
}

我不明白为什么它跳过ch2=getchar()输入,我得到ch2 == -1这是EOF的值。我试图通过在getchar()之前添加另一个ch2=getchar()来解决此问题,但我仍然得到ch2 == -1。它为什么以及如何解决?谢谢你的帮助。

我正在使用MacOS。

2 个答案:

答案 0 :(得分:1)

编译时,始终启用所有警告,然后修复这些警告

我使用了这个版本的代码,它干净地编译:

#include <stdio.h>
int main(){
    int ch;
    while((ch=getchar())!=EOF){
       putchar(ch);
    }
    int ch2 = 'A';
    printf("ch2=======>%c\n",ch2);
    ch2 = getchar();
    printf("ch2=======>%d\n",ch2);
    return 0;
}
然后输入

ddd<ctrl-d>ccc<cr>

这是预期的(和实际的)结果:

ddd
ddd
ch2=======>A
ccc
ch2=======>99

注意:

1)getchar()在输入<cr><ctrl-d>之前不会返回

2)所有输入的字符都由终端驱动程序(不是程序)回显

3)输入缓冲区中仍有2 c个和<cr>尚未消耗

答案 1 :(得分:0)

没有什么令人惊讶的。你的循环

while((ch=getchar())!=EOF){
       putchar(ch);
}

完全耗尽stdin。然后printf()stdout添加了一些数据,但stdin仍为空,因此后续的getchar()会返回EOF