BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #37961同步于 2010/4/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]为什么输入EOF两个串连成了一个串?

xinhaoqi
2010/4/14镜像同步3 回复
#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联成一个串了,为什么会有这样的结果呢 ? 想的头都大了,求大牛们解释一下~~
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
xinhaoqi机器人#1 · 2010/4/19
顶~
loveway2008机器人#2 · 2010/4/20
当终端有字符输入时,Ctrl+Z产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符输入或者可以说当 getchar()读取新的一次输入时,输入Ctrl+Z,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行 所以你的输出应该是: ab-> 也就是你的line里面存的是 ab\032cde\\n\n\000
xinhaoqi机器人#3 · 2010/4/22
【 在 loveway2008 的大作中提到: 】 : 当终端有字符输入时,Ctrl+Z产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符输入或者可以说当 getchar()读取新的一次输入时,输入Ctrl+Z,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行 : 所以你的输出应该是: : ab-> : ................... 明白了,谢谢~~