我从 K&R 复制了以下 C 代码。如果当前是用户键入的最长行,则该代码应该打印一行。这是代码:
#include <stdio.h>
#define MAXLINE 1000
int max;
char line[MAXLINE];
char longest[MAXLINE];
int getline();
void copy();
int main(){
int len=0;
extern int max;
extern char longest[];
max = 0;
while((len = getline()) > 0)
if (len > max){
max = len;
copy();
}
if (max > 0){
printf("%s", longest);
}
return 0;
}
int getline(){
int c;
int i;
extern char line[];
for(i = 0; i < MAXLINE-1
&&(c=getchar())!=EOF&&c!='\n';++i)
line[i] = c;
if(c=='\n'){
line[i]=c;
++i;
}
line[i] = '\0';
return i;
}
void copy(){
int i;
extern char line[];
extern char longest[];
i=0;
while((longest[i]=line[i])!='\0')
++i;
}
问题是它似乎不起作用。运行代码,我可以在控制台中输入行,但它不会打印最长的行。我将不胜感激任何帮助。
额外信息:I7m 使用 Win7 和 Open Watcom 编译器。控制台不折叠,它让我输入字符。另外,我不确定我是否陷入了循环,因为如果我将 main() 中的 while 循环更改为
while((len = getline()) > 0)
if (len > max){
printf("IT WORKS");
max = len;
copy();
}
如果行的长度比当前的最大长度长,则使用打印命令,然后在屏幕上打印“IT WORKS”。所以它肯定是在计算行长。