简单单位转换程序-带do while循环的scanf问题(C编程)

简单单位转换程序-带do while循环的scanf问题(C编程),c,while-loop,scanf,C,While Loop,Scanf,我目前遇到的问题是,该程序没有执行第一个scanf命令之前的部分,只是跳过了整个决策过程,并返回到do while循环的开头。我已经阅读了其他建议,告诉人们使用fgetc(),因为在输入转换类型(1-5)后,回车按钮会在输入缓冲区中创建一个空白,这将防止出现这种情况,但我真的不愿意,因为它不是我当前学习材料的一部分,作为最后手段,我将使用它,即使如此,我也不知道如何代替scanf实现。程序看起来好像已经完成了,把它翻译成C++代码(我很熟悉)允许它工作,但是由于某种原因,它不能与我在C代码中合作

我目前遇到的问题是,该程序没有执行第一个scanf命令之前的部分,只是跳过了整个决策过程,并返回到do while循环的开头。我已经阅读了其他建议,告诉人们使用fgetc(),因为在输入转换类型(1-5)后,回车按钮会在输入缓冲区中创建一个空白,这将防止出现这种情况,但我真的不愿意,因为它不是我当前学习材料的一部分,作为最后手段,我将使用它,即使如此,我也不知道如何代替scanf实现。程序看起来好像已经完成了,把它翻译成C++代码(我很熟悉)允许它工作,但是由于某种原因,它不能与我在C代码中合作。我还尝试了stackoverflow的另一个建议,其中提到使用scanf:scanf(“%c*c”,&conversionDirection);这确实让它进入下一部分,但有时会迫使你输入两次决定,第一次输入不会给你一个反应。。。如果有人能测试这段代码,我会非常感激,因为从现在开始我不知道该怎么做了,我已经尝试了所有的方法

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int userChoice;
    char conversionDirection;
    float calculateNumber;

    do
    {
        printf("Please enter one of the following: \n");
        printf("Number\tConversion\n\n");
        printf("1\t Kilogram/Pound\n");
        printf("2\t Litre/Gallon\n");
        printf("3\t Centimeter/Inch\n");
        printf("4\t Celsius/Fahrenheit\n");
        printf("5\t Quit\n");
        scanf("%d", &userChoice);

        if (userChoice == 1)
        {
            printf("Enter 'K' for Kilogram -> Pound or Enter 'P' for Pound -> Kilogram\n");
            scanf("%c", &conversionDirection);

            if (conversionDirection == 'K')
            {
                printf("Please enter the amount of Kilograms\n");
                scanf("%f", &calculateNumber);

                printf("%f Kilograms is equal to %f Pounds\n\n", calculateNumber, calculateNumber * 2.2);
            }
            else if (conversionDirection == 'P')
            {
                printf("Please enter the amount of Pounds\n");
                scanf("%f", &calculateNumber);

                printf("%f Pounds is equal to %f Kilograms\n\n", calculateNumber, calculateNumber / 2.2);
            }
        }
        else if (userChoice == 2)
        {
            printf("Enter 'L' for Litre -> Gallon or Enter 'G' for Gallon -> Litre\n");
            scanf("%c", &conversionDirection);

            if (conversionDirection == 'L')
            {
                printf("Please enter the amount of Litres\n");
                scanf("%f", &calculateNumber);

                printf("%f Liters is equal to %f Gallons\n\n", calculateNumber, calculateNumber * 0.264172);
            }
            else if (conversionDirection == 'G')
            {
                printf("Please enter the amount of Gallons\n");
                scanf("%f", &calculateNumber);

                printf("%f Gallons is equal to %f Liters\n\n", calculateNumber, calculateNumber / 0.264172);
            }
        }
        else if (userChoice == 3)
        {
            printf("Enter 'C' for Centimeter -> Inch or Enter 'I' for Inch -> Centimeter");
            scanf("%c", &conversionDirection);

            if (conversionDirection == 'C')
            {
                printf("Please enter the amount of Centimeters\n");
                scanf("%f", &calculateNumber);

                printf("%f Centimeters is equal to %f Inches\n\n", calculateNumber, calculateNumber * 0.393701);
            }
            else if (conversionDirection == 'I')
            {
                printf("Please enter the amount of Inches\n");
                scanf("%f", &calculateNumber);

                printf("%f Inches is equal to %f Centimeters\n\n", calculateNumber, calculateNumber / 0.393701);
            }
        }
        else if (userChoice == 4)
        {
            printf("Enter 'C' for Celsius -> Fahrenheit or Enter 'F' for Fahrenheit -> Celsius");
            scanf("%c", &conversionDirection);

            if (conversionDirection == 'C')
            {
                printf("How many degrees Celsius?\n");
                scanf("%f", &calculateNumber);

                printf("%f degrees Celsius is equal to %f degrees Fahrenheit\n\n", calculateNumber, (calculateNumber * 9 / 5) + 32);
            }
            else if (conversionDirection == 'F')
            {
                printf("How many degrees Fahrenheit?\n");
                scanf("%f", &calculateNumber);

                printf("%f degrees Fahrenheit is equal to %f degrees Celsius\n\n", calculateNumber, (calculateNumber - 32) * 5 / 9);
            }
        }
        else if (userChoice == 5)
        {
            printf("Program Exit");
            return 0;
        }
        else
        {
            printf("Please enter a valid number");
        }
    } while (userChoice != 5);


    return 0;
}
#包括
#包括
int main()
{
int用户选择;
炭转化方向;
浮点数;
做
{
printf(“请输入以下内容之一:\n”);
printf(“数字\t转换\n\n”);
printf(“1吨千克/磅”);
printf(“2吨升/加仑”);
printf(“3\t厘米/英寸”);
printf(“4摄氏度/华氏度”);
printf(“5\t退出\n”);
scanf(“%d”、&userChoice);
if(userChoice==1)
{
printf(“输入'K'表示千克->磅或输入'P'表示磅->千克\n”);
scanf(“%c”&转换方向);
if(conversionDirection==“K”)
{
printf(“请输入千克的数量”);
scanf(“%f”、&calculateEnumber);
printf(“%f千克等于%f磅\n\n”,calculateNumber,calculateNumber*2.2);
}
else if(conversionDirection=='P')
{
printf(“请输入英镑的金额”);
scanf(“%f”、&calculateEnumber);
printf(“%f磅等于%f千克\n\n”,calculateNumber,calculateNumber/2.2);
}
}
else if(userChoice==2)
{
printf(“输入“L”表示升->加仑或输入“G”表示加仑->升\n”);
scanf(“%c”&转换方向);
if(conversionDirection=='L')
{
printf(“请输入升的数量”);
scanf(“%f”、&calculateEnumber);
printf(“%f升等于%f加仑\n\n”,calculateNumber,calculateNumber*0.264172);
}
else if(conversionDirection=='G')
{
printf(“请输入加仑的数量”);
scanf(“%f”、&calculateEnumber);
printf(“%f加仑等于%f升\n\n”,calculateNumber,calculateNumber/0.264172);
}
}
else if(userChoice==3)
{
printf(“输入'C'表示厘米->英寸或输入'I'表示英寸->厘米”);
scanf(“%c”&转换方向);
if(conversionDirection=='C')
{
printf(“请输入厘米的数量\n”);
scanf(“%f”、&calculateEnumber);
printf(“%f厘米等于%f英寸\n\n”,calculateNumber,calculateNumber*0.393701);
}
else if(conversionDirection=='I')
{
printf(“请输入英寸的数量\n”);
scanf(“%f”、&calculateEnumber);
printf(“%f英寸等于%f厘米\n\n”,calculateNumber,calculateNumber/0.393701);
}
}
else if(userChoice==4)
{
printf(“输入'C'表示摄氏->华氏温度或输入'F'表示华氏->摄氏温度”);
scanf(“%c”&转换方向);
if(conversionDirection=='C')
{
printf(“多少摄氏度?\n”);
scanf(“%f”、&calculateEnumber);
printf(“%f摄氏度等于%f华氏度”\n\n“,calculateNumber,(calculateNumber*9/5)+32);
}
else if(conversionDirection=='F')
{
printf(“华氏多少度?\n”);
scanf(“%f”、&calculateEnumber);
printf(“%f华氏度等于%f摄氏度\n\n”,calculateNumber,(calculateNumber-32)*5/9);
}
}
else if(userChoice==5)
{
printf(“程序退出”);
返回0;
}
其他的
{
printf(“请输入有效数字”);
}
}while(userChoice!=5);
返回0;
}

使用scanf时有两条建议(尤其是数字):

1) 使用
fflush(标准输入法)

2) 检查取消打印的结果-是否收到编号

例如,如果没有正确的输入就无法工作:

do{
printf(“请输入号码:”);
fflush(stdin);
}而(1==scanf(“%d”、&number));

您的第二个点是有效的,但是
fflush()
是用于输出流的(尽管可能对输入有效)。这非常有效!非常感谢你。我是新到这个网站,我不知道如何给你信用,因为你写了评论而不是答案!