c语言编程问题 为什么在scanf(" %c",&ch);中%c加个空格就正确了?加空格和没加空格有什么不同?求解,详细点

#include "stdio.h"
int main()
{
float a,b,z;
char ch;
for(;;){

printf("input two number:\n");
scanf("%f%f",&a,&b);
printf("zhifu:");
scanf(" %c",&ch);

switch(ch)
{

case '+': z=a+b;break;
case '-': z=a-b;break;
case '*': z=a*b;break;
case '/': z=a/b;break;

}
printf("%.2f%c%.2f=%.2f\n",a,ch,b,z);
}
getch();

}
是%c前加空格和%c前没加空格,我不理解这是为什么?

我的理解是你先输入1 2按回车,然后屏幕显示zhifu ,然后你在输入+。
如果你是这样输入的话%c前没有空格的话+不会读入程序赋给ch,因为输入1 2后的回车符号赋给了ch,而接受回车的意思就是输入终止,所以+并没有赋给ch
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-27
这是因为你输入的时候,是这样输入的
1 2 +这样吧,符号和前面的数字之间有一个空格??
这个空格就是scanf中的要加的那个空格,如果
你输入
1 2+没有空格,则不需要,你试试!!
第2个回答  2011-11-27
不用加空格,在scanf("%c",&ch);
加一个getch();处理也可以的

printf("input two number:\n");
scanf("%f%f",&a,&b);
printf("zhifu:");
scanf(" %c",&ch);
改为:
printf("input two number:\n");
scanf("%f%f",&a,&b);
printf("zhifu:");
getch();
scanf("%c",&ch);

这样就是将上一次scanf("%f%f",&a,&b);输入时,用户最后输入的那个回车给吸收掉。

在%c前加空格也有一样的效果
第3个回答  2011-11-27
原因在于函数scanf把用户输入的回车和空格也当做一个有效的字符读入处理了(在你输入两个数按的那个回车被后面的scanf(" %c",&ch)读入),所以出错!
在%c前加空格就是为了存储回车或空格等特殊字符。
相似回答