为什么这两次输出结果是一样的,希望有大神给我详细解释。谢谢

 我来答
弈轩
2018-10-04 · 知道合伙人教育行家
弈轩
知道合伙人教育行家
采纳数:1029 获赞数:7544
电子设计大赛三等奖 优秀毕业生

向TA提问 私信TA
展开全部

因为C语言的输入输出流格式中

%c指的是单个字符

%d指的是整数

你输入12 34

会将1和2识别为字符,“空格34换行”按整数识别

而空格和换行都不属于数字字符,会剔除,然后sacnf函数会将34字符转化为34的int真值。

如图,如果这样输入:


就会把“空格”识别为一个字符。
发现规律了吗?如图,如有疑问或不明白请追问哦!

追答

又做了一个测试,我输入
1换行200
结果a='1'
b='\n'(换行)
c=200
换行也会当做一个字符处理哦!
%c是只算一个字符的,而%s是算一个字符串的。

----------------------------------

识别机制是这样的:

①%c即单个字符,输入任何字符都会触发,并将此字符存到对应char型变量。

②%d以及其他数值型输入,都是以换行(回车)作为触发条件的,但是换行符不会录入对应变量,换行怎么能成为数值嘛。

③%s即字符串,以换行(回车)作为触发条件,但录入后换行却不见了。

如下图 输入“123456789换行321”按%c%c%s%d识别。


会把1、2当做单个字符,

换行触发字符串识别,于是3456789输入为字符串。注意换行不算入字符串,只是作为触发,如图输出时只有一行,不会自动换行。

再换行触发整数识别,c=321。

-------------------------------

那么这个换行触发整数或字符串识别时,是凭空消失呢还是咋的?

再做一个实验:

规律是什么呢?就是触发了字符串识别和整数识别的“换行”,还会留着给下一个待识别对象,a和b都是换行符的原因是:字符串s的换行给了a,整数c的换行给了b。

该测试的源代码如下:

#include <stdio.h>
int main() {
char a, b;
int c;
char s[100];
printf("输入从下一行开始,按“字符串s、字符a、整数c、字符b”顺序\n");
scanf("%s%c%d%c", s, &a, &c, &b);//%s指字符串
printf("输出从下一行开始,每一项输出都用【】括起来,按a,b,c(整数),s(字符串)顺序来。\n");
printf("a=【%c】\n", a);
printf("b=【%c】\n", b);
printf("c=【%d】\n", c);
printf("s=【%s】\n", s);
//getchar(); getchar();  //我用的VS2015程序结束后不会“按任意键继续”,为防止闪退的代码。
return 0;
}
如果觉得答案满意请采纳。无论你采纳与否,提问的财富值都已经扣掉了的,脑力劳动也需要被尊重。
free疯狂卡丁车
2018-10-04 · TA获得超过314个赞
知道答主
回答量:501
采纳率:17%
帮助的人:43.9万
展开全部
你输入的第三个是%d数值型的,前两个是%c字符型的,空格可以当成字符但不能作数值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式