关于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,判断成功失败。
[解决办法]