为什么这两次输出结果是一样的,希望有大神给我详细解释。谢谢
2个回答
展开全部
追答
又做了一个测试,我输入
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;
}
如果觉得答案满意请采纳。无论你采纳与否,提问的财富值都已经扣掉了的,脑力劳动也需要被尊重。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询