| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:刚学C语言,遇到了一个很不解的问题!!!
只看楼主 加入收藏
clownsmail
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-12-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
刚学C语言,遇到了一个很不解的问题!!!
来自C语言程序设计里面的一道例题:
用的是gcc编译
#include<stdio.h>
main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++ nc;
    printf("%ld\n", nc);
}
当我按照上代码执行,然后输入abc并没有按照预期的那样输出3而是无任何输出,然后我这样修改了代码,如下:
#include<stdio.h>
main()
{
    long nc;
    int C;

    nc = 0;
    while ((C == getchar()) != EOF){
        ++ nc:
        putchar(nc);
    }
    printf("%ld\n", nc);
}
再次执行输入abc输出的结果是:
1234

[ 本帖最后由 clownsmail 于 2013-12-7 14:10 编辑 ]
搜索更多相关主题的帖子: 程序设计 include C语言 
2013-12-07 14:08
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:5 
貌似编译器不同...
我这里结果和你不一样
输入abc 输出是 4    因为回车键也当做字符键入了
(顺便问一下,你输入结束后  有木有 ctrl+Z?  这是结束标志)
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 韶志 于 2013-12-7 14:51 编辑 ]

三十年河东,三十年河西,莫欺少年穷!
2013-12-07 14:44
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:15 
第一个程序,你输入abc再回车,循环还没有结束,(你的结束条件是EOF, 不是回车)
当然没有输出。
第二个也一样,循环没结束。输出是putchar(nc);的输出, 不是printf()函数的输出
你第二次输入了a, b, c, 回车,四个字符, 所以是1234.
while ((C == getchar()) != EOF);
C不会等于你输入的字符, C ==  getchar() 永远是 0; 0永远不等于EOF。所以循环是死循环。
你的等于号用错了。应该用 “=”表示赋值。

把第一个程序改成 while (getchar() != '\n') 就可以了。

2013-12-07 14:57
clownsmail
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 2楼 韶志
哦!明白了,还以为回车键是结束呢。3q

怀念 ,一种坚强 !
2013-12-07 20:11
clownsmail
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 3楼 pangshch
恩恩,我把结束标志搞错了,谢谢

怀念 ,一种坚强 !
2013-12-07 20:12
clownsmail
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 2楼 韶志
Ctrl+Z不行,下面的是截图
图片附件: 游客没有浏览图片的权限,请 登录注册

怀念 ,一种坚强 !
2013-12-07 21:52
clownsmail
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 3楼 pangshch
#include<stdio.h>
main()
{
    int c;
    while ((c = getchar()) != EOF)
        putchar(c);
}
为什么在这个例程里,当执行代码输入abc回车则输出abc,判断putchar(c)是否执行的条件相同,在语句getchar(c)没有得到任何输入便输出-1 即EOF,为什么这里回车可以,上面那个却行不通

怀念 ,一种坚强 !
2013-12-07 22:10
clownsmail
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 3楼 pangshch
while (getchar() != '\n')
ok

怀念 ,一种坚强 !
2013-12-07 22:21
shuanen_com
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-12-7
收藏
得分:0 
貌似3楼分析的叫准确。

shuanen_com
2013-12-07 22:33
clownsmail
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-12-7
收藏
得分:0 
回复 9楼 shuanen_com
是的,

怀念 ,一种坚强 !
2013-12-07 23:02
快速回复:刚学C语言,遇到了一个很不解的问题!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020969 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved