| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 983 人关注过本帖
标题:关于这个代码输出的问题
只看楼主 加入收藏
li362490567
Rank: 1
等 级:新手上路
帖 子:89
专家分:8
注 册:2015-7-9
结帖率:0
收藏
 问题点数:0 回复次数:11 
关于这个代码输出的问题
#include<stdio.h>
int main(void)
{
   
    char ch;
    while ((ch = getchar()) != '|')
    {
        printf("lll\n");
    }
   
    return 0;
}

随便输入一个字符,不是应该只输出一行lll 但是我编译器怎么输出两行lll? 求解答
搜索更多相关主题的帖子: return 编译器 
2015-07-28 11:10
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
scanf()或getchar输入字符时会有一个缓冲区问题,过滤或清除及可,,
2015-07-28 12:04
li362490567
Rank: 1
等 级:新手上路
帖 子:89
专家分:8
注 册:2015-7-9
收藏
得分:0 
回复 2楼 hjx1120
如何过滤 如何清除?
2015-07-28 12:06
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
a,过滤缓冲区
#include<stdio.h>
int main(void)
{
   
    char ch;
    while ((ch = getchar()) != '|')
    {
        while(getchar() != '\n')
            continue;
        printf("lll\n");
    }
   
    return 0;
}

b, 清空缓冲区
#include<stdio.h>
int main(void)
{
   
    char ch;
    while ((ch = getchar()) != '|')
    {   
        fflush(stdin);
        printf("lll\n");
    }
   
    return 0;
}
2015-07-28 13:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
比如你输入 a回车
那么就是两个字符,一个是 'a',一个是'\n'
2015-07-28 13:55
li362490567
Rank: 1
等 级:新手上路
帖 子:89
专家分:8
注 册:2015-7-9
收藏
得分:0 
回复 4楼 hjx1120
看不明白,你新写的这几个语句,能解释下吗
2015-07-28 16:16
li362490567
Rank: 1
等 级:新手上路
帖 子:89
专家分:8
注 册:2015-7-9
收藏
得分:0 
回复 5楼 rjsp
如何解决?
2015-07-28 16:17
kenierlee
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:58
专家分:474
注 册:2015-7-28
收藏
得分:0 
回复 7楼 li362490567
while ((ch = getchar()) != '|' && ch != '\n')
{
    printf("lll\n");
}
2015-07-28 16:25
li362490567
Rank: 1
等 级:新手上路
帖 子:89
专家分:8
注 册:2015-7-9
收藏
得分:0 
能有人 帮忙解释下4楼写的a:第二个while 为何用getchar!= 而不用ch!=,我用ch编译器没有输出结果,这是为啥。。
b: fflush(stdin); 啥意思
2015-07-28 16:38
kenierlee
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:58
专家分:474
注 册:2015-7-28
收藏
得分:0 
回复 9楼 li362490567
4楼的代码有逻辑问题应该改为:
程序代码:
while ((ch = getchar()) != '|')
{
    printf("lll\n");
    while (getchar() == '\n')
        continue;
}

fflush针对输入流来说,是把输入缓冲区清空,对于输出流则是把缓存的内容写入目标位置,所以fflush(stdin)就可以把剩在输入缓冲区中的那个'\n'吃掉。
2015-07-28 17:04
快速回复:关于这个代码输出的问题
数据加载中...
 
   



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

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