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