| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 308 人关注过本帖
标题:关于scanf输入的不解
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
结帖率:97.22%
收藏
已结贴  问题点数:10 回复次数:4 
关于scanf输入的不解
在做较大程序时scanf总是出岔子,奶奶的,一说的到它我就来气,算了,先不骂它了...

可能是一开始我基础不牢固,不知道scanf这个缺德的家伙加了'\n'不删,把它留在输入缓冲区里
后来我用getchar()来清除缓冲区,但是既麻烦又不安全
刚刚它又来坑我了,所以今天一定要把它给挂了......

我检查竟然发现在scanf(" %c",&b);中因为在%c前加了一个空格前一个scanf("%c",&a);
中在输入缓冲区遗留下来的'\n'竟然不会被读入到scanf(" %c",&b);中去

我想问一下scanf(" %c",&b);与没加空格有什么具体的区别吗?
缓冲区中的数据在第一个地方没有被读入的话是不是就自动销毁了
也许文字表达的不太清楚,就拿这个例子吧:
         int main(void)                                   int main(void)
{                                                {
    char a=0,b=0;                                      char a=0,b=0;
    scanf("%c",&a);                                    scanf("%c",&a);
    scanf("%c",&b);                                    scanf("%c",&b);
    printf("b==%c",b);                                 printf("b==%c",b);
    return 0;                                          return 0;
}                                                }

输出则完全不同,问题如上

int main(void)
{
    char a=0;
    int b=0;
    scanf("%c",&a);
    scanf("%d",&b);
    printf("b==%d",b);
    return 0;
}
   
还有个小问题,我发现改成%d也不会读入
不过'\n'对应的数字为10,%d中'\n'为什么不能被换做10呢?
请耐心解答,非常感谢
搜索更多相关主题的帖子: 缓冲区 
2012-11-17 16:08
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:5 
空格在格式化字符串中的意义是跳过0个或多个空白字符,能明白这个你就懂了。'\n'它是一个字符,你怎么可能用%d来读取呢?

My life is brilliant
2012-11-17 16:23
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
跳过0个或多个空白字符?说实话我不太懂...什么时候跳过0个,什么时候跳过多个呢?
如果%d没有读取,则'\n'也没有继续留在缓冲区,那它咋了捏...

I have not failed completely
2012-11-17 16:36
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:5 
在读取字符时,加空格表示要跳到 第一个非空白字符(空格、制表符、换行符)处,而不加表示读取输入中遇到的第一个字符


你用的格式是%d,它要读取的是第一次输入的数字[不包括非空白字符(空格、制表符、换行符)].进去...而'\n'是一空白字符...
2012-11-17 17:30
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
   哦,也就是说给了只是不要对吧,恩恩恩...I do...

I have not failed completely
2012-11-17 17:41
快速回复:关于scanf输入的不解
数据加载中...
 
   



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

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