作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个程序代码,该程序读取用户的输入选择并根据它计算(面积、周长、体积或退出)
#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
调用会留下 \n
字符。您需要在下一次迭代之前使用此 \n
,否则此 \n
字符将由下一个 scanf
或 getchar
读取>。
使用代码片段
int ch;
while((ch = getchar()) != EOF || ch != '\n');
就在 do-while
的右大括号 }
之前或在第二个 scanf
之后。
关于c - 如何在scanf之前清理缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045208/
我是一名优秀的程序员,十分优秀!