32

我试图从 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++;

}
4

3 回答 3

72

CTRL+D您可以使用(for *nix) 或CTRL+ZEnter (for Windows) 从命令行模拟 EOF 。

于 2013-04-21T22:33:42.347 回答
8

在寡妇中,当您准备好完成输入时,按Enter键,然后按Ctrl+Z,然后Enter完成输入。

int main(){
    char ch[100];    
    scanf("%[^EOF]",ch);    
    printf("\nthe string is:\n%s\n",ch);    
    fflush(stdin);    
    return 0;    
    }
于 2017-03-10T05:17:23.427 回答
3

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

简短的回答:你不能。

于 2019-09-23T13:53:33.160 回答