循环((ch=getchar())!=EOF)结束后,下一个 ch2=getchar()为什么不工作?

2016-07-31 11:41:41 +08:00
 rebeccaMyKid
#include <stdio.h>
int main(){
    char ch;
    while((ch=getchar())!=EOF){
       putchar(ch);
    }
    char ch2 = 'A';
    printf("ch2=======>%c\n",ch2);
    ch2 = getchar();
    printf("ch2=======>%d\n",ch2);
    return 0;
}

为什么在 win 下,输入 Ctrl+Z ,会等待 ch2 的 getchar()输入,而 Mac 下, ch2 的 getchar()直接跳过,而且 ch2 的值总是-1(EOF)?

1569 次点击
所在节点    问与答
7 条回复
fcicq
2016-07-31 11:48:41 +08:00
楼主中了一个坑. getchar 的返回值类型是 int. 必须用 int 类型的变量存放这个返回值, 判断完了再赋值给 char 类型的变量.
SuperFashi
2016-07-31 11:52:09 +08:00
你这声明是 c++的啊,为什么这么多人非要写 c 风格的读入输出呢……
SuperFashi
2016-07-31 11:52:45 +08:00
tm 眼瞎了,抱歉。
SuperFashi
2016-07-31 11:55:05 +08:00
不过给你个链接,下面的样例 code 解释了你的问题。
http://en.cppreference.com/w/c/io/getchar
wsy2220
2016-07-31 12:11:23 +08:00
1lou 正解,我也被坑过
msg7086
2016-07-31 13:41:22 +08:00
因为不同编译器的关系?
oska874
2016-07-31 18:52:59 +08:00
你应该用 ctrl+d 吧,我在在 linux 下 试了是可以的达到你的效果的。

另外楼上几位说 ch 类型不对的,和 lz 的问题没啥关系, int 的 -f 就是 0xffffffff , char 的 0xff 也是 -1 ,所以没啥影响。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX