问题描述
- 关于EOF在while里面的结束
- char input;
gets(input);
while(*input!=EOF)
{gets(input);}
我用这种形式,在几次循环之后输入^z却无法跳出循环
如果换成下面这种就可以,为什么?
char input;
while(gets(input)&&*input!=EOF)
{}
解决方案
因为EOF的意思是-1,第一种那样是判断一个数值是否为-1,第二个退出是因为gets(input)为假了,也就是你按了Ctrl+z的时候,所以才跳出的
解决方案二:
根据man page, gets的返回值是这样的
RETURN VALUES
Upon successful completion fgets() and gets() return a pointer to the string. If end-of-file occurs before any charac-
ters are read they return NULL and the buffer contents remain unchanged. If an error occurs they return NULL and the
buffer contents are indeterminate. The fgets() and gets() functions do not distinguish between end-of-file and error
and callers must use feof(3) and ferror(3) to determine which occurred.
所以你的代码只需要
while(!gets(input))
{
...
}
解决方案三:
我不明白为什么你用gets去获取一个字符,gets的参数是字符串啊, input的类型应该是
char *input;
while(gets(input) != NULL)
{
...
}