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