C K&R第1.9节getline()-如何让EOF工作

C K&R第1.9节getline()-如何让EOF工作,c,C,在Kernighan&Ritchie的《C编程语言》一书中,出现了以下代码。我用getline替换了getline,以避免与stdio的getline发生命名冲突;当这本书的第二版出版时,它不存在吗?这是一个附带问题,但该计划不会终止 我知道它没有达到EOF,我不知道如何给它一个EOF。我正在Ubuntu中使用终端 #include <stdio.h> #define MAXLINE 1000 int getLine(char line[], int maxline); void c

在Kernighan&Ritchie的《C编程语言》一书中,出现了以下代码。我用getline替换了getline,以避免与stdio的getline发生命名冲突;当这本书的第二版出版时,它不存在吗?这是一个附带问题,但该计划不会终止

我知道它没有达到EOF,我不知道如何给它一个EOF。我正在Ubuntu中使用终端

#include <stdio.h>
#define MAXLINE 1000
int getLine(char line[], int maxline);
void copy(char to[], char from[]);
main()
{
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];
    max=0;
    while((len = getLine(line,MAXLINE)) > 0)
        if(len > max){
            max = len;
            copy(longest,line);
        }
    if(max > 0)
        printf("%s", longest);
    return 0;
}
int getLine(char s[], int lim)
{
    int c, i;
    for(i=0;i< lim - 1 && (c=getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    if(c == '\n'){
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}
void copy(char to[], char from[])
{
    int i;
    i=0;
    while((to[i]=from[i])!='\0')
        ++i;
}

我运行程序,输入一些文本行,然后按enter键。我这样做过几次;但它不会终止,因为没有EOF。我如何给它一个EOF?通常我会说代码是错误的,但这应该是C编程的圣经,所以我假设有一个有效的解释。

如果您的终端有默认控件,Control-D会发送一个EOF


这可以通过stty命令更改。Control-D设置为stty eof^D。

您是否尝试过键入Control-D?可能是重复的,谢谢,就是这样:我以前尝试过Ctrl+C,但这只是结束了程序,没有输出。Ctrl+D以输出结束程序。但几乎没有理由更改它,更不用说有好的理由了!这有点像重新编程你的汽车速度表,以克林贡语读数,而不是英里/小时或公里/小时。@SteveSummit:我想你从未使用过旧的HP-UX。默认值是另外一回事。