| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1143 人关注过本帖
标题:C新手,遇到一个奇怪的问题,只能来这里请假大咖们了
只看楼主 加入收藏
yimingyin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-8-4
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:6 
C新手,遇到一个奇怪的问题,只能来这里请假大咖们了
我先上code:

数据类型为char

#include <stdio.h>
int main(void)
{
    int a=0;
    char b='n';
    for(;;)
    {
        printf("need more?");
        scanf("%c",&b);
        if(b=='n')
        {
            break;
        }
    }
    return 0;
}

数据类型为int

#include <stdio.h>
int main(void)
{
    int a=0;
    int b=10;
    for(;;)
    {
        printf("need more?");
        scanf("%d",&b);
        if(b==10)
        {
            break;
        }
    }
    return 0;
}
如果运行这个code,没有input ‘n',循环每次输出两次“need more?”
如果我把’b'的数据类型换做int,则不会出现这样的问题,实在不知道为什么,请教了。
搜索更多相关主题的帖子: code 数据类型 int scanf break 
2017-08-04 09:58
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:7 
改为:
scanf(" %c",&b);
2017-08-04 10:18
yimingyin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-8-4
收藏
得分:0 
回复 2楼 吹水佬
可以了,请问是为什么呢
2017-08-04 10:19
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:3 
以下是引用yimingyin在2017-8-4 10:19:06的发言:

可以了,请问是为什么呢

假设你输入'y'然后回车,实际是输入了2个字符('y'和'回车符'),2个都不是'n',所以输出了2次了。
2017-08-04 10:22
yimingyin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-8-4
收藏
得分:0 
回复 4楼 吹水佬
多谢了,没有考虑到enter也是一个字符
2017-08-04 10:26
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:5 
%c的字符输入格式会接收回车字符
scanf的控制串由三类字符构成:
1、格式化说明符
2、空白符
3、非空白符
其中“空白符”是指空白字符,会使scanf函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
2017-08-04 10:30
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
收藏
得分:5 
记得刷新缓冲区fflush(stdin),这样就不会出现这个问题了。
2017-08-04 10:36
快速回复:C新手,遇到一个奇怪的问题,只能来这里请假大咖们了
数据加载中...
 
   



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

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