为什么scanf不能存空格?

char a[10];
scanf("%s",&a[0]);

打a b
只输出a

我来说下标准答案吧

首先你写的不规范,
正确应该是这样。
char str[100];
char chr;
scanf("%s%c", str,&chr);
可能你只是觉得表达清楚意思就行了。

然后再说为什么会向你说的这样
你输入一个字符串赋值给str,然后按回车或者空格来结束,以输入下一个字符赋值给chr,你知道不,你按空格或者回车也是字符啊,所以它就把你输入的空格或者回车赋给了chr字符了。
空格的AscII码是32,回车好像是13或者20。

明白了不?
如果你中间加一个空格,输入完第一字符串后,按空格,他会按格式赋值,因为scanf("%s %c"); 中间有一个空格,会吸收这个空格,因此会在你输入空格后的下一个字符赋给字符chr。

scanf("%d%f%d%")
像这样的中间的空格或者回车不会被下一个变量吸收,具体你可以看书上的定义

scanf("%c%c")这样的,你输入ab,然后他把a赋给第一个,a赋给第二个,没问题。
但是你输入a后,再空格或者回车,他就会把空格或者回车赋给第二个字符。
另外,团IDC网上有许多产品团购,便宜有口碑
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-30
scanf("%s",&a[0]);
这个函数本来就是过滤掉空格的.
scanf过滤空格,方便输入多组数据.不用回车
例子:如果
scanf("%s%d",&a[0],&b);
就不用回车了.
你想用的是字符数组就用指针把
char *a[10];
scanf("%s",a);
printf("%s",a);
第2个回答  推荐于2017-09-09
你可以把scanf改成下面

scanf("%9[0-9a-zA-Z ]s",&a[0]);

注意Z后面有空格,还有%后面是9,小于10,是为了防止溢出。本回答被提问者采纳
第3个回答  2011-04-30
你这是把a【0】赋值,当然不能放两个了。可以这么写scanf("%s",a);在一个一个的输入中,scanf是虑掉空格的,不过你可以试试getchar();
第4个回答  2011-04-30
在这个函数里空格是输入字符串分隔符之一
用gets之类的试试吧

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网