返回信息流#include<stdio.h>
#define MAXLINE 1000
int getline(char line[],int maxline);
void copy(char to[],char from[]);
main()
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max=0;
while((len=getline(line,MAXLINE))>0)
if(len>max){
max=len;
copy(longest,line);
}
if(max>0)
printf("%s\n",longest);
system("pause");
}
int getline(char s[],int lim)
{
int c,i;
for(i=0;i<lim-1&&(c=getchar())!=EOF&&c!='\n';++i)
s[i]=c;
if(c=='\n'){
s[i]=c;
++i;
}
s[i]='\0';
return i;
}
void copy(char to[],char from[])
{
int i;
i=0;
while((to[i]=from[i])!='\0')
++i;
}
测试数据:
abcd\n
abEOF
cde\n
EOF
结果:
abcde
也就是说把ab和cde联成一个串了,为什么会有这样的结果呢 ?
想的头都大了,求大牛们解释一下~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #37961同步于 2010/4/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]为什么输入EOF两个串连成了一个串?
xinhaoqi
2010/4/14镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
当终端有字符输入时,Ctrl+Z产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符输入或者可以说当 getchar()读取新的一次输入时,输入Ctrl+Z,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行
所以你的输出应该是:
ab->
也就是你的line里面存的是
ab\032cde\\n\n\000
【 在 loveway2008 的大作中提到: 】
: 当终端有字符输入时,Ctrl+Z产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符输入或者可以说当 getchar()读取新的一次输入时,输入Ctrl+Z,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行
: 所以你的输出应该是:
: ab->
: ...................
明白了,谢谢~~