gpt4 book ai didi

c - getchar 和 EOF C 编程

转载 作者:行者123 更新时间:2023-11-30 21:10:00 25 4
gpt4 key购买 nike

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

当 EOF (ctrl + z) 位于新行中时,这可以正常工作,但是当输入是:
blabla^z
它不起作用。当我调试程序时,它告诉我输入“^z”(^z = EOF)保存为26,
但当输入 ^z 在新行中时,它会保存为 -1。为什么?
如果有不清楚的地方:
它保存在变量 c 中,不起作用意味着它不会终止 while 循环,只有当输入 ^z 放入新行时它才会终止循环
我使用 Windows

最佳答案

也许您使用错误,并且 CTRL+z 符号不会发送到 getchar() 函数(这将给出 EOF),而是发送到运行您的程序的系统(例如,它将“停止”程序) )。

尝试

#include <stdio.h>

int main() {
int c;
while ((c = getchar()) != EOF) {
// while ((c = getchar()) != '.') {
putchar(c);
}
putchar('W');
}

无论如何,您看到输出“W”吗? (特别是当使用新行时?)就我而言,我得到“已停止”(在 UNIX 系统上, CTRL+Z is used to suspend a process )。

On Windows system, the answer has already been given on SO :

At the end of a line, hitting ^z (or ^d on linux) does not cause the terminal driver to send EOF. It only makes it flush the buffer to your process (with no \n).

Hitting ^z (or ^d on linux) at the start of a line is interpreted by the terminal as "I want to signal EOF".

关于c - getchar 和 EOF C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32736593/

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