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

标签 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 设置。

关于c - K&R 第 1.9 节 getline() - 如何让 EOF 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445498/

相关文章:

c - 如何将存储在数组中的字符串与 c 中完整库中的函数名称进行比较

c - 使用Pro*C编程时如何知道SQL是否执行成功?

C 气泡问题

c - 警告 : conflicting types error

c - 如何用等效的 strcat() 替换 memcpy() ?

c - 我尝试在linux上用c语言学习pipe

c - 将 char * 数组中的字符串分配给另一个 char * 数组

c - 我可以使用什么逻辑条件来跳过 f = .8 和 f = .4 的逻辑行?

c - 简化字符串迭代

c - case 和 default 是否被视为陈述?