gpt4 book ai didi

c - getchar() != EOF

转载 作者:太空狗 更新时间:2023-10-29 14:50:20 28 4
gpt4 key购买 nike

我正在运行来自 C Programming Language 的以下程序书:

#include <stdio.h>
main()
{
int c;
while((c=getchar()) != EOF)
putchar();
}

或者

#include<stdio.h>
int main(){
int c = getchar();
while(c != EOF){
putchar(c);
c = getchar();
}
}

当我运行这个程序时,出现无法解释的行为。如果我按以下顺序从命令行输入字符:{'h', 'e', 'l', 'l', 'o', '\n', '^D'} 然后我将以下响应打印到屏幕上:hello,在输入 \n 后,程序在输入 ^D 后退出。

但是,当我按如下方式更改序列时:{'h', 'e', 'l', 'l', 'o', '^D'} 然后我得到以下响应打印到屏幕:hello,但程序没有退出。我输入 ^D 后它不应该退出吗?我必须再次输入 ^D 程序才能退出。或者程序仅在我在 \n 之后输入 ^D 后退出。我不明白为什么无论什么时候输入^D程序都不退出。有什么想法吗?

我在 UNIX 系统上运行。

最佳答案

当您键入 ^D(“传输结束”)时,输入缓冲区将被刷新,并且您之前键入的所有内容都会发送到您的程序(实际上不会发送 ^D 字符)。它类似于键入换行符,但是,在这种情况下,换行符本身也会被发送。程序在读取零个字符时认为其输入已关闭。当您键入换行符后跟 ^D 或两个连续的 ^D 时,会发生这种情况。

关于c - getchar() != EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27183865/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com