我正在编写程序代码,该程序从用户读取输入选项并根据其计算(面积,周长,体积或退出)
#include<stdio.h>
int main(void)
{
double radius=0.0;
double area=0.0;
double volume=0.0;
double height=0.0;
double circumference=0.0;
const double pi=13.459820934;
char choice;
do
{
printf("Choose what you want to do : \n"
"Calculate Area A\n"
"Calculate Circumference C\n"
"Calculate Volume V\n"
"Quit Q\n");
/*scanf("%c",&choice);*/
choice=getchar();
printf("please enter radius : ");
scanf("%lf",&radius);
if(choice=='V')
{
printf("please enter height : ");
scanf("%lf",&height);
}
area = pi * radius * radius;
volume = height * area;
circumference = 2 * pi * radius;
switch (choice)
{
case 'A':
printf("Area = %lf\n\n",area);
break;
case 'V':
printf("Volume = %lf\n\n",volume);
break;
case 'C':
printf("Circumference = %lf\n\n",circumference);
break;
default:
printf("Not a good answer !!\n\n");
}
}while(choice!='Q');
return 0;
}
当我运行该程序时,它适用于第一次执行循环但是在第二次开始循环后再次选择选项时,它没有等待我输入我的选择,它直接打印“请输入半径“
当我调试程序时,我发现在第二次开始循环时有选择'\ n',如何在每个循环中删除'\ n'? 我知道这个'\ n'来自于第一次循环运行时读取用户选择,但我不知道为什么选择从选择中移除而不是?
我在向用户显示选项之前尝试初始化选择但发生了同样的问题
有什么帮助吗? 提前谢谢
答案 0 :(得分:1)
按 Enter 键后,\n
调用留下scanf
个字符。您需要在下一次迭代之前使用此\n
,否则此\n
字符将由下一个scanf
或getchar
读取。
使用代码段
int ch;
while((ch = getchar()) != EOF || ch != '\n');
在}
的右大括号do-while
之前或第二scanf
之后。