标题:为什么%c前面要加空格才能实现这个功能?
只看楼主
zh77
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:84
专家分:22
注 册:2011-8-5
结帖率:100%
已结贴  问题点数:4 回复次数:10 
为什么%c前面要加空格才能实现这个功能?
#include <stdio.h>

int main(void)
{
    char ch;
   
    do
    {
        printf("AA\n");
        printf("是否继续?(y/n)\n");
        scanf(" %c", &ch);//为什么%c前面要加空格才能实现这个功能?
    } while (ch=='y' || ch=='Y');
   
    return 0;
}
如果需要重复执行则输入y或Y为什么给ch赋值的时候需要在%c前面加一个空格呢?不加就不能实现这个功能 求解释
不懂  

搜索更多相关主题的帖子: while 加空格 return include 
2011-08-18 00:50
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
得分:1 
原因何在,在%前面加一个空格就这么有用,答案是肯定的,就是%前面的空格在起作用,读者看看此文章的前面部分,在scanf的使用过程中应注意的问题中已经指出:“scanf()的格式控制串可以使用空白字符或其它非空白字符,使用空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。”   所以在%前面加上了空格(空格属于空白字符,此外还有像制表符等也属于空白字符),在输入过程中,将略去输入中的一个或多个空白字符,所以我们输入的0 1 2 3 4 5 6 7 8 9这些字符中的空白字符就被略去了,字符9也就正确的打印出来了,这样子解释,相信大家都看明白勒吧!

    节选自百度百科:http://baike.baidu.com/view/1390039.htm
2011-08-18 01:28
_xiong_mao_1
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:49
专家分:102
注 册:2010-12-6
得分:1 
运行一次判断ch==y  ,再运行,ch==‘10’,受到了换行符的影响,所以得加空格,具体细节有点不是太懂。

不过楼主只要在scanf后面加一句getchar();就成了。
2011-08-18 01:39
zh77
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:84
专家分:22
注 册:2011-8-5
得分:0 
回复 2楼 naruto01
表示不懂
2011-08-18 11:37
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
得分:0 
回复 4楼 zh77
你可以调试下"%c"时,ch变量的值怎样变化。
然后再看看那篇文章,应该很容易理解。
2011-08-19 15:49
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
得分:1 
http://bbs.
主要是stdin流的问题,相当于一个系统缓存,可以到上面的网站上看一下,第一个例程和楼主的问题一样
2011-08-19 19:10
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
得分:0 
主要是stdin流的问题,相当于一个系统缓存,可以到上面的网站上看一下,第一个例程和楼主的问题一样
2011-08-19 21:39
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
得分:0 
顶顶

Go Go Go
2011-08-19 21:40
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
得分:0 
#include <stdio.h>

int main(void)
{
    char ch;
   
    do
    {
        printf("AA\n");
        printf("是否继续?(y/n)\n");
        scanf(" %c", &ch);//为什么%c前面要加空格才能实现这个功能?
    } while (ch=='y' || ch=='Y');问题是出在这里,do...while(),do执行一次,然后判断条件,条件中(ch=='y' || ch=='Y')有空格,把空格删了就行了。
   
    return 0;
}
或者在scanf语句下边加一句getchare();也可以实现
2011-08-19 21:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:1 
撞了墙懂绕路走才成,一条道走到黑,以后还怎么写程序啊。明明学过getchar()或getch(),正是对应读一个字符的,对口的东西不用,死用scanf(),这样下去神仙都救不活你。
收到的鲜花
  • hjywyj2011-08-20 08:34 送鲜花  1朵   附言:++

授人以渔,不授人以鱼。
2011-08-19 22:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-347822-1-1.html




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

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