如何通过Windows终端发送EOF

How to send EOF via Windows terminal

提问人:804b18f832fb419fb142 提问时间:4/22/2013 最后编辑:Jean-François Fabre804b18f832fb419fb142 更新时间:12/9/2021 访问量:64886

问:

我正在尝试理解 K&R 书中的示例 1.9,但我不明白如何发送 EOF。一些消息来源提到了 Ctr+Z,但这只是终止了程序。我以某种方式设法发送了带有 Enter 和 Ctrl+Z 以及 Ctrl+V 组合的 EOF,但我无法重现它。

#include <stdio.h>
#define MAXLINE 1000

main()
{
    int len;
    int max;
    char line[MAXLINE];
    char save[MAXLINE];

    max = 0;
    while((len = getline_my(line, MAXLINE)) > 0)
    if(len > max) {
        max = len;
        copy(line, save);
    }
    if(max > 0)
        printf("%s", save);
}

getline_my(s, lim)
char s[];
int lim;
{
    int c, i;

    for(i=0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; i++)// As long as the condition is fulfilled
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        i++;
    }
    s[i] = '\0';
    return(i);
}

copy(s1, s2)
char s1[];
char s2[];
{
    int i;

    i = 0;
    while((s2[i] = s1[i]) != '\0')
        i++;

}
C 视窗

评论

0赞 Osama Javed 4/22/2013
那是针对 Unix 的......这些是 cmd 上的所有命令 ss64.com/nt/syntax-keyboard.html

答:

82赞 xagyg 4/22/2013 #1

您可以使用 (对于 *nix) 或从命令行使用 Enter (对于 Windows) 模拟 EOF。CTRL+DCTRL+Z

评论

7赞 MrMas 12/10/2017
这对我不起作用(Windows 10 + Anaconda 终端),但提供的答案@mauriceShun做到了。
0赞 cmaceachern 9/23/2019
这在 Windows 7 cmd.exe 上不起作用(不发送 C 程序正在寻找的 EOF 字符)。
17赞 Carl Walsh 11/24/2019
在 Windows 上,您需要按 after 才能实际发送它。ENTERCTRL+Z
1赞 Kristian Heitkamp 11/22/2022
ctrl-D 需要站在一行的开头。在 mac OS 上,我按回车键,然后按 ctrl-D。
9赞 mauriceShun 3/10/2017 #2

在寡妇中,当您准备好完成输入时,请按 键,然后按 然后完成输入。EnterCtrl+ZEnter

int main(){
    char ch[100];    
    scanf("%[^EOF]",ch);    
    printf("\nthe string is:\n%s\n",ch);    
    fflush(stdin);    
    return 0;    
    }

评论

5赞 BLUEPIXY 12/8/2017
scanf("%[^EOF]",ch);而且很糟糕。fflush(stdin);
5赞 Antti Haapala -- Слава Україні 6/22/2019
这完全是无稽之谈!
0赞 wovano 9/30/2021
文本是正确的,但代码...这是在开玩笑吗?做什么?你能发布一个记录在案的资源吗?应该怎么做?"%[^EOF]"fflush(stdin)
3赞 cmaceachern 9/23/2019 #3

最后,鉴于简单的 K&R 代码是为类 Unix 系统设计的,因此在 Windows 上无法轻松完成。您可以发送 '^Z^M' (Ctrl-Z 然后按 Enter) 来发送 Windows 等效的 EOF,但您在此 C 程序中检查的字符 'EOF' 并不相同。

简短的回答:你不能。