2 u012876369 u012876369 于 2014.11.09 16:17 提问

关于EOF在while里面的结束
eof

char input;
gets(input);
while(*input!=EOF)
{

   gets(input);
}

我用这种形式,在几次循环之后输入^z却无法跳出循环
如果换成下面这种就可以,为什么?
char input;
while(gets(input)&&*input!=EOF)
{

}

3个回答

lx624909677
lx624909677   Ds   Rxr 2014.11.18 15:12

因为EOF的意思是-1,第一种那样是判断一个数值是否为-1,第二个退出是因为gets(input)为假了,也就是你按了Ctrl+z的时候,所以才跳出的

eagleyan
eagleyan   Rxr 2014.12.01 13:31

根据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))
{
...
}

eagleyan
eagleyan   Rxr 2014.12.01 13:39

我不明白为什么你用gets去获取一个字符,gets的参数是字符串啊, input的类型应该是
char *input;

while(gets(input) != NULL)
{
...
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!