ch2=getchar()不';在((ch=getchar())!=EOF)时,在最后一个输入循环之后不工作 #包括 int main(){ char ch; 而((ch=getchar())!=EOF){ putchar(ch); } char ch2='A'; printf(“ch2====>%c\n”,ch2); ch2=getchar(); printf(“ch2====>%d\n”,ch2); 返回0; }

ch2=getchar()不';在((ch=getchar())!=EOF)时,在最后一个输入循环之后不工作 #包括 int main(){ char ch; 而((ch=getchar())!=EOF){ putchar(ch); } char ch2='A'; printf(“ch2====>%c\n”,ch2); ch2=getchar(); printf(“ch2====>%d\n”,ch2); 返回0; },c,C,我不明白为什么它会跳过ch2=getchar()输入,我得到ch2==-1,这是EOF的值。我试图通过在ch2=getchar()之前添加另一个getchar()来解决这个问题,但仍然得到ch2==-1。为什么会这样?如何修复?谢谢你的帮助 我正在使用MacOS。没有什么令人惊讶的。你的循环 #include <stdio.h> int main(){ char ch; while((ch=getchar())!=EOF){ putchar(ch);

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


我正在使用MacOS。

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

#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;
}

完全排放标准DIN。然后
printf()

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

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

1)
getchar()
在输入
之前不会返回

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


3) 输入缓冲区中仍有2个
c
s和一个
尚未使用

为什么在本例中使用EOF?据我所知,这个代码与文件无关。最后一个输入是
EOF
,所以它不会进入循环;一旦到达输入端,任何进一步的读取尝试仍将到达输入端。此外,不要将
getchar()
的返回值存储在
char
中。它返回
int
是有原因的。@melpomene噢,谢谢。那么,这是否意味着标准输入流在我键入EOF时永久停止?是的,好吧,但是如果stdin是从键盘输入的(像往常一样),即使在键入Ctrl-Z之后,您通常也可以继续键入,并且stdin并没有真正用尽。@rudyvelthui在最后一次循环迭代和
ch2=getchar()之间的时间片
太小,用户肯定无法提供新的键盘输入,并且STDIN仍然可能被认为是空的。getchar()是缓冲的,因此程序将等待输入,直到有人按return键(或调用任何键)。时间片应该是无关的。好吧,我在Windows和Mac上试过了。Mac实际上并不等待,而是立即返回-1(EOF)。这和你写的相符。但在Windows上,getchar()会等待输入第一个
'\n'
。六羟甲基三聚氰胺六甲醚。。。不一致。我不知道哪个是正确的。@RudyVelthuis是的。。我刚刚在Windows上试过,我的代码运行得很好。它等待
getchar()
输入,但在Mac上它只返回-1。哈哈,我很困惑。你是在使用Linux还是MacOS,因为我注意到你键入了
Ctrl+D
。我在Mac上复制了你的代码并运行了它。它不起作用。但是我的代码和你的代码在Windows上都运行得很好。我打赌他正在使用Linux。
#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