在 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/