首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于EOF和NULL的关系【全分奉下】

2012-09-04 
关于EOF和NULL的关系【全分奉上】这个题:输入字符串当遇见EOF时停止我最初的打算是这样写:#include stdio.h

关于EOF和NULL的关系【全分奉上】
这个题:输入字符串当遇见EOF时停止

我最初的打算是这样写:
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(void)
{
char ar[2][8];
char * p[2];
int i=0;


while (i<2)
{
gets(ar[i]);
if (*(*(ar+i))==EOF) //if(*(ar[i])==EOF)
break;
i++;
}
return 0;
}
但是这样写不行,我按下Ctrl+z还是不会中断输入。
【请教问题出在哪里】

于是我便去翻了下答案。
答案上对于这段是这样写下的。
do
{
if ( gets(str[n]) == NULL )
break;
n++;
}
while( n<10 );

问题出在这里:
为什么检测EOF却和NULL扯上关系了?有大侠能详细讲解下么,不胜感激。


[解决办法]
这个函数不会返回EOF的。
失败的时候返回是NULL
[解决办法]
gets() 不是 getc(), 也不是getchar() 需要判断返回的是不是EOF。
它返回char*, 所以判断是否NULL,判断成功失败。
[解决办法]

探讨

引用:
这个函数不会返回EOF的。
失败的时候返回是NULL

问题有多多 见谅了:
--------------------------
嗯 那严格意义上来说 答案作者只是用了 另一种方式来达到同样的 效果么?
如果是,应该用如何真切的方式来实现 对 EOF的检测而非NULL呢?
--……

[解决办法]
1、一个字符一个字符的读取用getchar函数,按下CTRL+Z的时候,getchar函数会返回EOF;
2、一行一行的读取用fgets函数,gets函数由于安全问题现在已经很少用,按下CTRL+Z的时候,fgets函数会返回NULL;
3、记住字符与EOF比较,而字符串是用NULL比较的,不要搞错了对象。
[解决办法]
gets()取字符串,遇到EOF结束,但是返回值是指针,而指针跟NULL比较

热点排行
Bad Request.