gpt4 book ai didi

c - 打印最长的输入行。(K&R(2e)(第 1.9 节)中的示例)

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:32 24 4
gpt4 key购买 nike

当我执行此程序(在 ubuntu 中)并输入类似 ($ 表示 EOF(Ctrl+D))的输入时:-

giujb  
bjb $$

没用
但是对于输入

giujb       
bjb $$$

有效。

我认为应该只要求给出 EOF 两次(在这个程序中)。谁能解释一下为什么要给EOF 3次?

我的代码

#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;
}

最佳答案

在 Linux 上,Ctrl-D 并不意味着文件结束 (EOF)。它的意思是“传输结束”,这意味着当前键入的输入会立即发送到您的程序。它类似于换行符,只是不发送 Ctrl-D 本身。您的 getchar 在收到空的“传输”时返回 EOF。这就是为什么您必须按三次 Ctrl-D(或一个换行符后跟两个 Ctrl-D)以获得两个 EOF。

关于c - 打印最长的输入行。(K&R(2e)(第 1.9 节)中的示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31290357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com