| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1392 人关注过本帖
标题:关于 EOF
只看楼主 加入收藏
soulmate1023
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:256
专家分:831
注 册:2014-9-23
收藏
得分:0 
回复 8 楼 我 FEI
就像众版主说的,那个函数不返回EOF,而且尽量不要用EOF。我也是深受其害。
2014-11-08 22:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用我FEI在2014-11-8 22:30:09的发言:

我只是摘了出错的那部分贴上去,逻辑自认为比较清楚,可能方法上不是最简洁的,我已经用其他方法完成程序了,但我是想知道这样是怎么错了,是语法错误还是其他原因。多谢

你定义的input是数组,那是数组名,用*input能得到什么数据?还要用这个来判断EOF?EOF是怎么返回的,我之前回答某人的问帖时曾经说过,自己找找看。你这个代码,一看就是逻辑不清晰所致,不要自认为比较清楚——你显然不知道gets()函数的工作机制,也不清楚EOF怎么来的——这些不清楚,怎么可能写得出逻辑清晰的代码。


[ 本帖最后由 TonyDeng 于 2014-11-8 23:04 编辑 ]

授人以渔,不授人以鱼。
2014-11-08 22:45
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:1 
gets()函数若读取出错或者读到文件结尾,返回的是一个空指针,此时字符数组不会写入任何东西,怎么能用来判断

坚持----------------------------------唯一的道路
shit ! ! !
2014-11-08 23:13
我FEI
Rank: 2
等 级:论坛游民
帖 子:87
专家分:27
注 册:2013-11-18
收藏
得分:0 
回复 13 楼 wssy213
char input[40];
 while(gets(input)&&*input!=EOF)
 {


 }
可是如果把gets()移到while的小括号里面就可以啊
你那种解释我也看了,可是为什么这种情况就行?我没理解透?
2014-11-09 15:40
我FEI
Rank: 2
等 级:论坛游民
帖 子:87
专家分:27
注 册:2013-11-18
收藏
得分:0 
回复 12 楼 TonyDeng
char input[40];
 while(gets(input)&&*input!=EOF)
 {


 }
可是如果把gets()移到while的小括号里面就可以啊
我看了几个你之前回答别人的帖子,那个什么库函数大全那本书很重要吗?我刚学c没多久,就是没事多学点东西。用不用现在就准备那本书。
还有你说专业版的软件更靠谱,我这种业余学的还有必要吗?
多谢指教
2014-11-09 16:08
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:0 
回复 14 楼 我 FEI
1.空指针可以看做是0
2.*input是数组的第一个元素
3.数组尚未初始化时,其内容是不可预知的

坚持----------------------------------唯一的道路
shit ! ! !
2014-11-09 16:18
我FEI
Rank: 2
等 级:论坛游民
帖 子:87
专家分:27
注 册:2013-11-18
收藏
得分:0 
回复 16 楼 wssy213
我把题目和我的代码贴上,这是一本书上的题,
这是题目
设计并测试一函数,其功能是搜索由函数的第一个参数指定的字符串,在其中查找由函数的第二个参数指定的字符的第一次出现的位置(和strchr()的功能一样),使用循环语句为这个函数提供完整程序进行测试。
这是我写的
#include<stdio.h>
char *location(char *p,char ch);
int main(void)
{
 char input[40];
 char ch;
 //gets(input);//如果把while里面的gets()移到这里,为何不行,程序输入ctrl+z也不会跳出循环
while(gets(input)&&*input!=EOF)//
 {
printf("enter a character:");
 ch=getchar();
 getchar();//用于舍去输入ch后键入的回车,否则gets(input)会读那个回车
printf("%p\n",location(input,ch));
 //gets(input);
 }
 printf("bye\n");
 return 0;
}
char *location(char *p,char ch)
{
 while(p++!=*\0*)
 {
 if(*p==ch)
 return p;
 }
 return NULL;
}
2014-11-09 16:36
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:0 
char input[40];       //未初始化,所以不可确定内容
gets(input);          //假设第一次输入一个字串"test"
while(*input!=EOF)    //条件为真,进入循环 <----
{                                              |  //返回,再次进行判断,由于上次输入失败,所以数组未写入任何新内容
...                   //执行循环体             |  //这时条件是否为真由*input决定
gets(input);          //此时输入EOF    --------
}

这就是你的代码逻辑问题

坚持----------------------------------唯一的道路
shit ! ! !
2014-11-09 18:18
Adws
Rank: 2
等 级:论坛游民
帖 子:19
专家分:87
注 册:2013-7-29
收藏
得分:1 
居然在这又见到你了.........
2014-11-09 18:29
我FEI
Rank: 2
等 级:论坛游民
帖 子:87
专家分:27
注 册:2013-11-18
收藏
得分:0 
回复 18 楼 wssy213
明白了,太感谢了,多谢多谢
2014-11-09 18:45
快速回复:关于 EOF
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027170 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved