C K&R第1.9节getline()-如何让EOF工作
在Kernighan&Ritchie的《C编程语言》一书中,出现了以下代码。我用getline替换了getline,以避免与stdio的getline发生命名冲突;当这本书的第二版出版时,它不存在吗?这是一个附带问题,但该计划不会终止 我知道它没有达到EOF,我不知道如何给它一个EOF。我正在Ubuntu中使用终端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
#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。默认值是另外一回事。