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;
}
問題は、それが機能していないように見えることです。コードを実行すると、コンソールに行を入力できますが、最も長い行が出力されません。助けていただければ幸いです。
追加情報: Open Watcom コンパイラで Win7 を使用する I7m。コンソールは折り畳まず、文字を入力できます。また、main() の while-loop を
while((len = getline()) > 0)
if (len > max){
printf("IT WORKS");
max = len;
copy();
}
行の長さが現在の最大長よりも長い場合、印刷コマンドで「IT WORKS」が画面に印刷されます。したがって、間違いなく行の長さを数えています。