如何模拟EOF?

59

我目前正在阅读K&R的书,并打字输入第一部分中的示例,其中有一些示例类似于这样:

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

我正在Windows上测试这些示例,因此从cmd提示符中运行已编译的exe文件。

要测试上面的示例,我如何模拟EOF? 也就是说,当从命令提示符测试示例时,如何使循环停止?

5个回答

102

输入EOF,请使用以下方法:

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

22
一些有用的附加信息:如果您正在编辑非空行,您需要双击^D键:第一次按下它将清空该行,第二次按下它将发送EOF。 如果您在空行上,则只需按一次^D键即可。 - Johannes Schaub - litb
12
那是HTML元素。 - Greg Hewgill
2
在Windows中,只有在行首输入^Z才会产生EOF。 - M.M

21

请参考EOF

Windows: Ctrl+Z
Unix :Ctrl+D

2

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


1

您也可以通过将 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;
}

嗯,它可能是一个不同于-1的值。-1只是一种约定(或在某些操作系统下EOF的值)。 - Alex
这并没有回答问题。 - ATaco

1
我在按下Ctrl+d后遇到了相同的问题,程序停止并返回0。 如果您使用Clion,请按Ctrl+Shift+a,然后输入Registry并按Enter,确保未选中run.processes.with.pty.。 之后重新编译程序,然后您可以键入输入,但不要在输入的同一行上按下Ctrl+d,否则会返回0或错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接