[英]How to clean buffer before scanf
我正在编写一个程序代码,该程序从用户读取输入选择并根据其计算(面积,周长,体积或退出量)
#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;
}
当我运行该程序时,它在第一个do循环中运行良好,但是在第二次开始循环时再次选择了选项之后,它并没有等我输入选择,而是直接打印“请输入半径”
当我调试程序时,我发现它第二次开始循环时选择了“ \\ n”,如何在每个循环中都删除该“ \\ n”? 我知道这个“ \\ n”是由于读取用户选择,然后是第一次运行循环而导致的,但是我不知道为什么选择项从选择项中删除而没有被删除?
我曾尝试在向用户显示选择之前初始化选择,但是发生了同样的问题
有什么帮助吗? 提前致谢
在按Enter键之后, scanf
调用会scanf
\\n
字符。 您需要在下一次迭代之前使用该\\n
,否则该\\n
字符将由下一个scanf
或getchar
读取。
使用摘要
int ch;
while((ch = getchar()) != EOF || ch != '\n');
在结束括号之前}
的do-while
或之后第二个scanf
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.