这个C程序不起作用

0 c console-application getchar

我从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;
      }
Run Code Online (Sandbox Code Playgroud)

问题是它似乎不起作用.运行代码,我可以在控制台中键入行,但它不会打印最长的行.我将不胜感激任何帮助.

额外信息:I7m使用Win7和Open Watcom编译器.控制台没有折叠,它让我输入字符.另外,我不确定我是否陷入循环,因为如果我将main()中的while循环更改为

while((len = getline()) > 0)
        if (len > max){
            printf("IT WORKS");
            max = len;
            copy();
        }
Run Code Online (Sandbox Code Playgroud)

如果行的长度超过当前的最大长度,则使用打印命令,然后在屏幕上打印"IT WORKS".所以它肯定是在计算线长.

Dig*_*oss 5

事实上确实如此,但在键入文件结束字符之前,它不会停止读取行.

这是Unix/Mac上的^ D和Windows上的^ Z. (但请注意,Windows并没有真正实现终端EOF,因此由您的库或Cygwin之类的东西来解释^ Z.)

如果您的窗口仅在程序运行时处于活动状态,我认为sleep(5)在main()的最后可能是个好主意.从像Mac上的终端或Windows上的DOS框这样的长期存在的窗口运行这样的控制台I/O程序真的是最好的.