【问题标题】:K&R section 1.9 getline() - how to get EOF to work [duplicate]K&R第1.9节getline() - 如何让EOF工作[重复]
【发布时间】:2019-08-10 20:31:49
【问题描述】:

在 Kernighan & Ritchie 的《The C Programming Language》一书中,出现了以下代码。 (我已经用 getLine 替换了 getline 以避免与 stdio 的 getline 发生命名冲突;在编写本书第 2 版时它不存在吗?这是一个附带问题)但是这个程序不会终止。

我知道它没有达到 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 吗?
  • End of File (EOF) in C 的可能重复项
  • 谢谢,就是这样:) 我之前尝试过 Ctrl+C,但这只是结束程序而没有输出。 Ctrl+D 以输出结束程序。

标签: c


【解决方案1】:

如果您的终端有默认值,Control-D 发送 EOF。

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

【讨论】:

  • 但是几乎没有理由(更不用说好的理由)来改变它了! (这有点像将汽车的速度表重新编程为以克林贡语读取,而不是 mph 或 km/h。)
  • @SteveSummit:我认为您从未使用过旧的 HP-UX。默认值是别的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
相关资源
最近更新 更多