我正在制作这个程序,要求用户输入电路的半径,然后让他们选择他想要计算的东西:面积,周长或圆柱体积。
#include <stdio.h>
int main(void)
{
float radius=0.0,height=0.0;
char choice,quit;
const float pi=3.1415658;
do
{
printf("Enter radius : \n");
scanf("%f",&radius);
printf("\n\nWhat do you want to calc.?\nArea of circuit --> press A\n"
"Circumference of circuit --> press C\nVolume of cylinder --> press V\nQuit --> Q\n");
scanf("%c",&choice);
switch (choice)
{
case 'A':
printf("Area = %.5f\n",radius*radius*pi);
break;
case 'C':
printf("Circumference = %.5f\n",2*radius*pi);
break;
case 'V':
printf("Enter Hight : \n");
scanf("%f",&height);
printf("Volume of cylinder = %.5f\n",radius*radius*pi*height);
break;
case 'Q':
quit='y';
break;
default:
printf("default!!\n");
break;
}
}while(quit != 'y');
return 0;
}
但是当我运行程序时
Enter radius : 3 What do you want to calc.? Area of circuit --> press A Circumference of circuit --> press C Volume of cylinder --> press V Quit --> Q /*here before I choose anything the next line appears, skipping reading the choice*/ default!! Enter radius :
那么为什么它会跳过阅读用户的选择并直接跳转到默认值? 有什么问题??
答案 0 :(得分:3)
这是因为当您使用scanf
读取半径时,您按下以结束该输入的换行符仍在输入缓冲区中。因此,当您稍后使用scanf
读取字符时,它会读取该换行符。
简单的解决方案是告诉后者scanf
跳过任何前导空格。这是通过向scanf
格式代码添加空格来完成的:
scanf(" %c", &choice);
/* ^ */
/* | */
/* Note space here */