请高手指点EOF问题

lumos 2008-09-20 05:42:03
最近在温习C语言的时候遇到一个问题,为什么在我电脑上运行需要遇到EOF结束的程序,怎么都结束不了呢
我看网上说用CTRL+z或者F6,但是我怎么都不能成功,每次CTRL+z都会变成^z,我用的IDE是VS2005,谢谢了
下面是我的程序:
#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",longest);
return 0;
}

//getline: 将一行读入s中并返回其长度
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] = '\n';
return i;
}
//copy:从from拷贝的to;假定to足够大
void copy( char to[ ],char from[ ])
{
int i;

i = 0;
while ( ( to[i]=from[i]) !='\0')
++i;

}
...全文
174 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lumos 2008-09-21
  • 打赏
  • 举报
回复
找到原因了
是我的getline函数漏掉了代码,并且有错误


//getline: 将一行读入s中并返回其长度
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;
}
谢谢大家的帮忙!
狂浪吻血 2008-09-20
  • 打赏
  • 举报
回复
昏,
多试试吧,但是还是要把原因搞清楚。。
lumos 2008-09-20
  • 打赏
  • 举报
回复
不知道为什么现在又可以了,真是奇怪,谢谢大家了!
lumos 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lyle3 的回复:]
找个其他的结束标志不就好了吗?非要用这个?
[/Quote]
我试了别的结果也是不行,可以给了例子吗?
lyle3 2008-09-20
  • 打赏
  • 举报
回复
找个其他的结束标志不就好了吗?非要用这个?
lumos 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jieao111 的回复:]
引用 5 楼 lumos 的回复:
引用 1 楼 jieao111 的回复:
>>但是我怎么都不能成功,每次CTRL+z都会变成^z,

在按一下确定就可以了

按照这位兄弟的方法有的程序可以了,但是有的却要按3次回车,真是难以理解

用v6的时候,我有时候需要按n次才可以。。现在vs2008只需一次,不知道vs2005
[/Quote]
好的谢谢了,不管怎样现在可以调试了

就呆在云上 2008-09-20
  • 打赏
  • 举报
回复
貌似是这么一回事哦
等高手冒泡
jieao111 2008-09-20
  • 打赏
  • 举报
回复
很可能是编译器的问题
lumos 2008-09-20
  • 打赏
  • 举报
回复
我输入三个单词后,再输入CTRL+z,然后要按三次回车,才会出结果,高手帮忙解释一下。。。

hello
china
congratulations
^Z


congratulations
请按任意键继续. . .
jieao111 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lumos 的回复:]
引用 1 楼 jieao111 的回复:
>>但是我怎么都不能成功,每次CTRL+z都会变成^z,

在按一下确定就可以了

按照这位兄弟的方法有的程序可以了,但是有的却要按3次回车,真是难以理解
[/Quote]
用v6的时候,我有时候需要按n次才可以。。现在vs2008只需一次,不知道vs2005
CWADQ 2008-09-20
  • 打赏
  • 举报
回复
是啊,要按多次回车,不明白!
lumos 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jieao111 的回复:]
>>但是我怎么都不能成功,每次CTRL+z都会变成^z,

在按一下确定就可以了
[/Quote]
按照这位兄弟的方法有的程序可以了,但是有的却要按3次回车,真是难以理解
wangdeqie 2008-09-20
  • 打赏
  • 举报
回复
1.结束输入:Ctrl+Z 回车
2.当你按Ctrl+Z时,屏幕上显示的就是^z
jieao111 2008-09-20
  • 打赏
  • 举报
回复

我随便输入点东西后,然后ctrl+z,进而按enter,输出如下,vs2008
hhh
fff
dd
^Z
hhh
ぜ~w?l请按任意键继续. . .
lumos 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jieao111 的回复:]
>>但是我怎么都不能成功,每次CTRL+z都会变成^z,

在按一下确定就可以了
[/Quote]
按几次都是一个样子啊,我很费解啊
jieao111 2008-09-20
  • 打赏
  • 举报
回复
>>但是我怎么都不能成功,每次CTRL+z都会变成^z,

在按一下确定就可以了

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧