1
darasion 2013-06-24 01:33:50 +08:00 1
回车也算.
|
2
edgar 2013-06-24 12:08:24 +08:00
clang那个是警告吧,而且你的gcc版本比较低,高版本的应该也会报错。
|
3
edgar 2013-06-24 12:33:28 +08:00
还有就是,那个1其实是getchar() != EOF的结果,改成(c=getchar())!=EOF应该就可以了
|
4
dndx 2013-06-24 12:39:50 +08:00 1
c = getchar() != EOF
因为 != 的优先级比 = 高,上面的代码等同于: c = (getchar() != EOF) 所以你的 c 变量在检测到 EOF 之前都是 0 ,估计不是你想要的效果。 改成 (c = getchar()) != EOF |
5
cmi 2013-08-07 00:58:07 +08:00
这题是K&R的Exercise 1-6吧?题目本来就是要验证 getchar() != EOF 的取值是0还是1。
多一个1是因为“回车也算.”。:) 我不明白的地方在于: 由于while (expression)的expression在此例里总是不为0,while循环无法结束,printf("%d - at EOF \n",c )永远无法执行,但是我想让这一句打印出来。 依照系统,EOF被定义为(-1), #ifndef EOF # define EOF (-1) #endif 我即使输入(-1),也无法让getchar() == EOF,这是什么原因?我哪里理解错了? |
6
cmi 2013-08-07 01:05:20 +08:00
刚回复完似乎有点明白了,即使getchar() == EOF,也只不过是给 c 赋了另外一个条件,并没有让c=0,所以while永远无法结束。
但是将一个条件赋予c,这算是什么语法? 这么理解正确吗? |
7
cmi 2013-08-07 01:13:56 +08:00
好像还不对。
这么测试总是要输入回车,这导致getchar() != EOF永远为真。 |
8
echo1937 OP @cmi 感谢你的回复,这个问题我去看了英文版,答案和中文版是不一样的.
英文版的答案是: #include <stdio.h> int main(void) { printf("Press a key. ENTER would be nice :-)\n\n"); printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF); return 0; } 看来是中文版的问题吧. |
9
vtvincy 2015-02-04 23:38:18 +08:00
|