打印最长的输入行。(例如K& R(2e)(1.9节))

时间:2015-07-08 10:44:58

标签: c

当我执行此程序(在ubuntu中)并输入($ represents EOF(Ctrl+D)) :-

之类的输入时
giujb  
bjb $$

它不起作用 但是对于输入

giujb       
bjb $$$

它有效。

我认为应该只需要两次EOF(在此程序中)。任何人都可以解释为什么需要给EOF三次?

我的代码

#include<stdio.h>
#define maxlength 1000
char line[maxlength];
char longest[maxlength];
int getlength();
void copy();
int main()
{
int max=0,leng=0;
while((leng=getlength())>0)
{ if(leng>max)
  {max=leng;
  copy();
  }
 } 
 if(max>0)
 printf("\n%s",longest);
 return 0;
 }
  int getlength()
 { char ch;
    int i;
    for(i=0;(i<(maxlength-1)) && ((ch=getchar())!= EOF) && (ch!='\n');++i)
    {line[i]=ch;
     printf("%d",i);
     }

    if(ch=='\n')
    {line[i]=ch;
     ++i;
     }
    line[i]='\0';
    printf("bye");
    return i;
    }
    void copy()
    {
    int i=0;
    while((longest[i]=line[i])!='\0')
    ++i;
    }

1 个答案:

答案 0 :(得分:1)

在Linux上,Ctrl-D并不意味着文件结束(EOF)。这意味着传输结束&#39;这意味着当前输入的输入会立即发送到您的程序。它类似于换行符,但不发送Ctrl-D本身。当getchar收到空的&#34;传输&#34;时,$.inArray(array,vale)会返回EOF。这就是你必须输入三次Ctrl-D(或换行后跟两个Ctrl-D)来获得两个EOF的原因。