主题:[讨论]while循环跳不出去
ziham [专家分:0] 发布于 2010-03-08 19:25:00
#include "stdio.h"
int main()
{
int c,i=0;
char symbol;
while (c=((symbol=getchar())!=EOF))
printf("%d,%c,%d\t",c,symbol,i++);
printf("\n");
printf("the final result is %d,%c",c,symbol);
return 0;
}
代码如上,但是执行while循环之后,就跳不出去,不继续执行printf("\n");这一句了,希望有人指教一二,谢谢!!
回复列表 (共11个回复)
沙发
boxertony [专家分:23030] 发布于 2010-03-08 20:37:00
1. EOF主要是在读文件的时候比较用,从键盘上读取应该跟其他字符,如回车符比较;
2. c=((symbol=getchar())!=EOF) 是把读取到的字符赋给sysmbol然后与EOF比较,把比较结果赋给c,这显然不是你想要的。
板凳
cxxcomp [专家分:2370] 发布于 2010-03-08 21:18:00
你准备做什么?我很迷茫
while (c=((symbol=getchar())!=EOF)) 再也找不到比这更含糊的东西了。
3 楼
dinghao517 [专家分:20] 发布于 2010-03-08 21:46:00
EOF是什么??
4 楼
cxxcomp [专家分:2370] 发布于 2010-03-08 22:05:00
EOF 是什么?[em10]
也许是 Earth Orbital Flight
5 楼
雪光风剑 [专家分:27190] 发布于 2010-03-09 09:22:00
EOF,End Of File文件结束符,也就是我们常见的'\0'
如果在windows下是ctrl+z,在linux下是ctrl+d
这种代码一般用于OJ……lz自己调试的时候还是慎用吧
6 楼
mywaylgh [专家分:210] 发布于 2010-03-09 11:04:00
c=((symbol=getchar())!=EOF)
看的蛋疼...
symbol=getchar()是赋值
(symbol=getchar())表示赋值是否成功..
(symbol=getchar())怎么可能用EOF判断???
c=((symbol=getchar())!=EOF)
这就更不明白了,
一个判断语句赋给一个int类型
那就只可能是0或1了,标准的c/c++应该编译不过才对。
7 楼
雪光风剑 [专家分:27190] 发布于 2010-03-09 14:05:00
编译可以通过的
赋值语句的返回值如果赋值正确的话返回的是赋的值
EOF也是可以强转成int型的东西,所以比较是可以通过的
最后那个c=怎么来的并不难理解,是oj常玩的一个逻辑冗余。
我印象里见过lz那种风格的冗余循环,能把新手搞疯,哈哈
8 楼
mywaylgh [专家分:210] 发布于 2010-03-09 14:16:00
[quote]编译可以通过的
赋值语句的返回值如果赋值正确的话返回的是赋的值
EOF也是可以强转成int型的东西,所以比较是可以通过的
最后那个c=怎么来的并不难理解,是oj常玩的一个逻辑冗余。
我印象里见过lz那种风格的冗余循环,能把新手搞疯,哈哈[/quote]
[color=FF0000]赋值语句的返回值如果赋值正确的话返回的是赋的值[/color]
以前还真没试过...
刚刚测试,确实如此。
不过这种写法依旧让人看的蛋疼.....
学习了,谢谢ls[em5]
9 楼
雪光风剑 [专家分:27190] 发布于 2010-03-09 14:21:00
所以我说,这是oj的玩意……很多东西,说起来都是对的,初学者都是不适合用的……
10 楼
ziham [专家分:0] 发布于 2010-03-10 20:08:00
那用这种方法可以使程序跳出循环继续执行吗? 能否解释一下为什么现在跳不出循环呢? 谢谢!
我来回复