C语言问题,关于Scanf的,空格问题

书上例题如下#include<stdio.h>#include<ctype.h>intmain(void){charanswer='n';doubletotal=0.0;... 书上例题如下
#include<stdio.h>
#include<ctype.h>

int main(void)
{
char answer='n';
double total=0.0;
double value=0.0;
unsigned int count=0;

printf("\n这个程序用来求任意个数字的平均值");
for( ; ; )
{
printf("\n请输入一个数:");
scanf(" %lf",&value);

total+=value;
++count;

printf("\n你还想再输入一个数吗?(Y or N)");
scanf(" %c",&answer);

if(tolower(answer)=='n')
break;

}
printf("\n以上数字的平均数为:%.2lf",total/count);
return 0;
}

请注意,这里的第二个scanf里面,引号内部,先是有空格,才写%c
我发现,如果把这个空格去掉,显示结果大不相同。具体如图,有空格和没空格的对比如下
主要体现在,是否会让你输入Y或N再让你输入数字,如果没空格,你还没选Y或N,就已经可以输入数字了
然后请各位帮忙解释下原因,这个空格为什么这么重要
展开
 我来答
百度网友540bf21
推荐于2017-12-15 · 超过20用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:24.6万
展开全部
scanf("%c",&answer) 与 scanf(" %c",&answer),后者只是在%前多了个空格,似乎没有什么区别,但使用起来区别是很大的。
scanf()作单字符输入时规定只接收一个字符,但它却把回车符也作为字符对待的。这就造成程序中只有一个输入字符的scanf()语句时,问题还不大,但如果后面还跟着第二个scanf()字符输入语句,这个scanf()就把前面输入的回车符当作输入字符了。这就在输入逻辑上造成了混乱,达不到人们预期的愿望。
有了这个空格,这个空格就相当于要求输入一个空格,刚好把刚才的'\n'接收掉。之所以' '能接收'\n',是因为"%c...."中的空格是广义的,对‘\n'、'\t'都有效。而且实践证明,这个空格放在%c后面也不能达到目的。应当说,这也是比较巧妙的应用!
更多追问追答
追问
先睡觉,明晚问,晚安
追答
睡吧,程序员都是夜行动物
capgcillary
2015-05-06 · 超过19用户采纳过TA的回答
知道答主
回答量:204
采纳率:0%
帮助的人:28.4万
展开全部
除了三楼说的,建议楼主以后一个scanf就针对一个变量。否则两个变量之间用空格或者逗号隔开,输入的时候也需要输入空格或逗号。同时在输入char型时注意,之前最后一次使用scanf或printf的时候,如果你使用了回车作为...
追问
😭竟然没写完
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
育知同创教育
2018-06-26 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
scanf("%d\n",&c)中\n不应该出现在""中,scanf的""里只放格式字符串(带%,如%d),其余的字符需要原样输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式