【发布时间】: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