读书人

为何跳不出while循环?解决方案

发布时间: 2012-03-18 13:55:39 作者: rapoo

为何跳不出while循环?
#include <stdio.h>
main ()
{
int s,t,e;
s=t=e=0;
while ((getchar())!=EOF){
if ((getchar())== ' ')
++s;
else if((getchar())== '\t ')
t++;
else if((getchar())== '\n ')
e++;
}
printf( "%d,%d,%d\n ",s,t,e);
}

[解决办法]
int c;
while ((c = getchar()) != EOF)
{
....
}
[解决办法]
CTR+z
[解决办法]
试试楼上说的.
[解决办法]
这个程序到底用来做什么?
楼主
跳不出while循环 是因为while循环里面的条件永远为真
[解决办法]
如果是一种遍历操作的话EOF也许可用,但getchar()的判断似乎永远为ture,除非用Ctrl+Z输入结束符
[解决办法]
键盘输入不了EOF 呵呵 除非ctrl+Z
[解决办法]
EOF:同时按 Ctrl + z 键
[解决办法]
如果是一种遍历操作的话EOF也许可用,但getchar()的判断似乎永远为ture,除非用Ctrl+Z输入结束符

------------------------------------
ctrl+Z 只是使程序挂起,并不会使getchar()多到EOF;
getchar()是从标准输入流中读取一个字符,但标准输入流一般就是键盘,是夺取不到EOF 的,()
[解决办法]
如果把EOF换成‘/n '
不知道结果是什么样
[解决办法]
或者如果把EOF换成‘/0 '
不知道结果是什么样

[解决办法]
#include <stdio.h>
main ()
{
int s,t,e;
s=t=e=0;
while ((getchar())!=EOF){
if ((getchar())== ' ')
++s;
else if((getchar())== '\t ')
t++;
else if((getchar())== '\n ')
e++;
}
printf( "%d,%d,%d\n ",s,t,e);
}


一直在getchar(),当然退不出来了,运气不好的话,必须连续按5-6个ctrl+Z


[解决办法]

一直在getchar(),当然退不出来了,运气不好的话,必须连续按5-6个ctrl+Z

-------------------------------------
我们不能把一种偶然现象当作必然来处理.
[解决办法]
只有循环条件为假时才能跳出循环,
while ((getchar())!=EOF) 这个循环的意思是当输入的字符为EOF时循环结束, 虽然EOF被规定为文件结束符,但它的值是-1,而字符所能表达的数字是从0-255,更本就不能表达出-1。所以这个循环恒真,自然就跳不出来。
把while循环改一下,以输入一个特殊字符来判定循环结束
#include <stdio.h> // VC下编译

int main(void)
{
char input;
int space, table, enter;

space = table = enter = 0;

printf ( "输入待统计的数据\n-> ");

while ((input = getchar ()) != 'q ') // 假设输入字符 q 时结束输入
{
if (input == ' ')
{
space++;
}

else if (input == '\t ')
{
table++;
}

else if (input == '\n ')
{
enter++;
}
}

printf ( "统计结果\n-> 空格符:%d 制表符:%d 换行符:%d\n ", space, table, enter);

return 0;
}

读书人网 >C语言

热点推荐