c - 在 Windows 10 系统上从 C 中的 getchar() 读取 EOF

标签 c

我正在写字符K&R C 书来尝试学习C 语言。我遇到了很多问题,因为我使用的是 Windows 10 操作系统而不是 Linux。我正在使用 msys2 来编译和运行我的代码。我很长一段时间都无法弄清楚第 1.5.1 节中的文件复制,直到向该领域的专家寻求帮助。他指出我需要使用 fflush(stdout);

{
    while ((c = getchar()) != EOF) {  // read buffer store in c, then check if it is EOF(ctrl+z on windows)
        fflush(stdout); //flush buffer
        putchar(c);    // print the character retrieved
        printf("%d\n",(c));
    }
    return(0);
}

添加这使得我的程序按预期工作。但是,现在我在下一部分的字符计数器上遇到了类似的困难。

long counter = 0;  // initialize c variable
while (getchar() != EOF) {  //check if character received is EOF(ctrl+z on windows)
    fflush(stdout); //flush buffer
    ++counter;    // incrementcounter
}
fflush(stdout);
printf("%ld\n",(counter));
return(0);

最后我再也没有在柜台上看到打印品。 The attached image shows what happens when I run the file. The "Stopped" print is from when I sent EOF(ctr+Z).

我基本上有两个问题:

  1. 当我向内核发送 EOF 时到底发生了什么。
  2. 有没有办法在不立即终止我的程序的情况下发送 EOF? 我希望这很容易理解,并提前感谢大家。

最佳答案

What exactly happens when i send EOF to my kernel.

系统(MSYS)告诉程序它的标准输入已经到达EOF(文件结束符),并且将不再有可用的输入。

Is there a way to send EOF without immediately killing my program?

没有。发送 EOF 永远不会立即终止程序。它让程序继续运行而不再读取输入。当您的程序找不到任何内容可读取时,它会自行终止。

您看到 Stopped 的原因是您根本没有发送 EOF! Oj Unix shell(包括 MSYS 和 Cygwin),Ctrl-Z 表示挂起。您可以输入 fg 将其再次置于前台,然后按 Ctrl-D 向其发送 EOF。

注意:Ctrl-Z 仅在 Windows CMD 和 Windows 10 中发送 EOF you have to uncheck a box .

关于c - 在 Windows 10 系统上从 C 中的 getchar() 读取 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503441/

相关文章:

c - 如何在 ANSI C 中使用 glDrawVertex() 函数

c - 如何连续列出/打印数组中的多个值?

c - 在 c 中操作 char*

c++ - void ** 相当于 void * 返回?

c - 为什么在我的代码中使用宏会导致错误以及如何修复它?

ios - 在 Objective-C 中将两个 uint8_t 转换/组合为 int16_t

c - C 中链表的麻烦

c++ - 如何将条件语句修饰为表达式?

c - 在函数内部创建的动态内存

C 编程语言 : Behavior of strcmp(str1, str2)