#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。
答案 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
。