如何模拟EOF?

How to simulate an EOF?

提问人:Andreas Grech 提问时间:7/13/2009 最后编辑:ppperyAndreas Grech 更新时间:2/22/2020 访问量:57857

问:

我目前正在阅读 K&R 的书并输入第一部分的示例,有几个示例,例如:

while((c = getchar()) != EOF) {
    //do something
}

我正在 Windows 机器上测试这些示例,从而从提示符运行编译的 exe 文件。cmd

为了测试上面的示例,如何模拟一个?也就是说,基本上如何在从命令提示符测试示例时使循环停止?EOF

C Eof Getchar Kernighan-and-Ritchie

评论


答:

102赞 Greg Hewgill 7/13/2009 #1

要输入 EOF,请使用:

  1. Windows 中的 ^Z ()CtrlZ
  2. ^D 在类 Unix 系统上

评论

22赞 Johannes Schaub - litb 7/13/2009
一些有用的补充:如果你在一条不空的线上,你将不得不双击^D:按一次会刷新该行,再按一次会发送EOF。如果你在空行上,一个^D就足够了。
12赞 Greg Hewgill 7/13/2009
这就是 <kbd> HTML 元素。
2赞 M.M 9/23/2015
在 Windows 中,输入 ^Z 仅在行首执行时才会生成 EOF。
21赞 aJ. 7/13/2009 #2

参考 EOF

Windows: Ctrl+Z
Unix :Ctrl+D
1赞 user1616974 8/22/2012 #3

您还可以通过显式为 int 变量提供值 -1 来模拟 EOF。

查看以下代码以更清晰:

#include<stdio.h>

int main() {    
    // char ch=getchar()
    // int ch=-1;

    if(ch==EOF) { printf("\nEOF: %d",EOF); }
    if((ch!=EOF)==0) { printf("\nit is equal to 0"); }
    if((ch!=EOF)==1) { printf("\nit is equal to 1"); }
    else { printf("\n it is equal to other value"); }
    system("pause");
    return 0;
}

评论

0赞 Alex 7/6/2015
嗯,它可能是与 -1 不同的值。-1 只是一个约定(或几个操作系统下的 EOF 值)
0赞 ATaco 7/3/2017
这并不能回答这个问题。
2赞 user3078185 12/8/2013 #4

首先,按:Ctrl^X,然后:Ctrl^D

1赞 Toffy_ 11/10/2019 #5

Ctrl+d 程序停止并返回 0 后,我遇到了同样的问题。 如果使用 Clion,请按 Ctrl+Shift+a 而不是键入 Registry,按 Enter 并确保未选中 run.processes.with.pty.。 之后,再次编译程序,然后您可以键入输入,但不要在与输入相同的行上按 Ctrl+d,它将返回 0 或错误。