c语言中,在int形和char形混输时如scanf("%d %c %c");,为什么%c前要加空格?

scanf("%d %c %c",&a, &b , &c);输入语句中加的有空格。如果不加空格写成
scanf("%d%c%c",&a, &b, &c);而用键盘输入“3空e空f”时会出错的。

晕 还有人回答是为了好看
是这样的```在不加空格的情况下"%d%c%c",&a, &b , &c 当你输入“3空e空f” 你第一个是整形 自然会把你输入的数字给第一个a,你输入第二个是空格,会把这个空格当成字符赋值给b 你输入第三个是e,会把e赋值给c 这样程序就认为已经完成了赋值,而不会理会后面的"空f"
结果a=3,b=' ',c='e'
可以这样测试
#include<stdio.h>
long main()
{
long a;
char b,c;
scanf("%d%c%c",&a, &b, &c); //输入“3空e空f”
printf("%c\n",c); //输出变量c为'e'
return 0;
}追问

3空e空f 那么我在输入3后它怎么知道我整数输入结束了,我输入一个空格不是告诉系统我数字输入结束了,接下来就输入字符类型。就像scanf("%d%d",&a, &b);一样在输入下一个整数时,
%d%d之间是没有空格的。字符之间输入时要用空格隔开我知道。这样表示:scanf("%d%c %c",&a,&b,&c);,这样输入3空e空f ,不是把3给了a,e给了b, f给了c可是还是不对???

追答

3空e空f 那么我在输入3后它怎么知道我整数输入结束了
因为遇到了不可转换为数字的字符 超出了'48-57'

我输入一个空格不是告诉系统我数字输入结束了
是的 但要知道此时这个空格还在缓存区内

表示再后面就不知道你说什么了

追问

空格还在缓存区内对数字有什么影响?
我后面的意思是: 用scanf("%d%c %c",&a,&b,&c);如果还是输入 3空e空f 则把3给了a,空格给了b, e给了c, 我用空格告诉系统数字结束了,下一个字符e是给b的,则输出结果不正确。 可是为什么用scanf("%d %c %c",&a,&b,&c); 把中间的%c前加了一个空格,输出结果正确。这是为什么呢?

追答

空格还在缓存区内对数字有什么影响?
表示数字部分已经完毕 对后面的字符部分有影响

我后面的意思是: 用scanf("%d%c %c",&a,&b,&c);如果还是输入 3空e空f
则把3给了a,空格给了b, e给了c,
是的

我用空格告诉系统数字结束了,下一个字符e是给b的,则输出结果不正确。 可是为什么用scanf("%d %c %c",&a,&b,&c); 把中间的%c前加了一个空格,输出结果正确。这是为什么呢?
这个想回答你要用一个例子
scanf("%d,%c,%c", &a,&b,&c);如果你是加逗号的 那你是不是输入时也要加个逗号呢?
一样的道理啊 其实对于这个问题你也大可以不必深究 把学习重点用在其它地方吧 如果还是不能理解 知道它这个地方要注意就行了 不会影响后面的学习 等以后感觉自己知识面够了再回头看这个问题 你会发现他很简单

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-12
可能是因为加了空格,输出比较好看(字母和数字被隔开),,编代码时并不一定要加空格的
第2个回答  2017-08-30
C语言就是这么要求的,scanf函数使用空白字符分割输入的数据,空白字符包括空格、换行、tap。
第3个回答  2012-03-12
不加空格的话就要再输完int型的值后回车,再输入char型的值
加空格就是把回车换成空格而已追问

我知道在用键盘输入的时候要加空格,我的意思是为什么不能写为scanf("%d%c%c",&a,&b,&c);这种形式!

追答

可以,你输入的时候要回车再输入ok?

追问

不ok啊!
这段代码你试试:
#include
int main()
{
int a;
char b, c;
scanf("%d%c%c",&a,&b,&c);
printf("a = %d, b = %c, c = %c", a, b, c);
system("pause");
return 0;
}

追答

#include
int main()
{
int a;
char b, c;
scanf("%d%c%c",&a,&b,&c);
printf("a = %d, b = %c, c = %c", a, b, c);
getchar();
return 0;
}

第4个回答  2012-03-13
数字结果不分开 你知道哪个是哪个啊。
相似回答