gpt4 book ai didi

c - 如何在scanf之前清理缓冲区

转载 作者:行者123 更新时间:2023-11-30 15:40:23 25 4
gpt4 key购买 nike

我正在编写一个程序代码,该程序读取用户的输入选择并根据它计算(面积、周长、体积或退出)

#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 字符将由下一个 scanfgetchar 读取>。

使用代码片段

int ch;
while((ch = getchar()) != EOF || ch != '\n');

就在 do-while 的右大括号 } 之前或在第二个 scanf 之后。

关于c - 如何在scanf之前清理缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com