提问人:804b18f832fb419fb142 提问时间:4/22/2013 最后编辑:Jean-François Fabre804b18f832fb419fb142 更新时间:12/9/2021 访问量:64886
如何通过Windows终端发送EOF
How to send EOF via Windows terminal
问:
我正在尝试理解 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++;
}
答:
82赞
xagyg
4/22/2013
#1
您可以使用 (对于 *nix) 或从命令行使用 Enter (对于 Windows) 模拟 EOF。CTRL+D
CTRL+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 才能实际发送它。ENTER
CTRL+Z
1赞
Kristian Heitkamp
11/22/2022
ctrl-D 需要站在一行的开头。在 mac OS 上,我按回车键,然后按 ctrl-D。
9赞
mauriceShun
3/10/2017
#2
在寡妇中,当您准备好完成输入时,请按 键,然后按 然后完成输入。Enter
Ctrl+Z
Enter
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' 并不相同。
简短的回答:你不能。
评论