回 帖 发 新 帖 刷新版面

主题:[讨论]while循环跳不出去

#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个回复)

沙发

1. EOF主要是在读文件的时候比较用,从键盘上读取应该跟其他字符,如回车符比较;
2. c=((symbol=getchar())!=EOF)  是把读取到的字符赋给sysmbol然后与EOF比较,把比较结果赋给c,这显然不是你想要的。

板凳

你准备做什么?我很迷茫
while (c=((symbol=getchar())!=EOF)) 再也找不到比这更含糊的东西了。

3 楼


EOF是什么??

4 楼

EOF 是什么?[em10]
也许是 Earth Orbital Flight

5 楼

EOF,End Of File文件结束符,也就是我们常见的'\0'
如果在windows下是ctrl+z,在linux下是ctrl+d
这种代码一般用于OJ……lz自己调试的时候还是慎用吧

6 楼

c=((symbol=getchar())!=EOF)

看的蛋疼...
symbol=getchar()是赋值
(symbol=getchar())表示赋值是否成功..

(symbol=getchar())怎么可能用EOF判断???

c=((symbol=getchar())!=EOF)
这就更不明白了,
一个判断语句赋给一个int类型

那就只可能是0或1了,标准的c/c++应该编译不过才对。

7 楼

编译可以通过的
赋值语句的返回值如果赋值正确的话返回的是赋的值
EOF也是可以强转成int型的东西,所以比较是可以通过的
最后那个c=怎么来的并不难理解,是oj常玩的一个逻辑冗余。
我印象里见过lz那种风格的冗余循环,能把新手搞疯,哈哈

8 楼

[quote]编译可以通过的
赋值语句的返回值如果赋值正确的话返回的是赋的值
EOF也是可以强转成int型的东西,所以比较是可以通过的
最后那个c=怎么来的并不难理解,是oj常玩的一个逻辑冗余。
我印象里见过lz那种风格的冗余循环,能把新手搞疯,哈哈[/quote]



[color=FF0000]赋值语句的返回值如果赋值正确的话返回的是赋的值[/color]


以前还真没试过...

刚刚测试,确实如此。

不过这种写法依旧让人看的蛋疼.....

学习了,谢谢ls[em5]

9 楼

所以我说,这是oj的玩意……很多东西,说起来都是对的,初学者都是不适合用的……

10 楼


     那用这种方法可以使程序跳出循环继续执行吗? 能否解释一下为什么现在跳不出循环呢? 谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册