【发布时间】:2015-02-03 20:48:46
【问题描述】:
我目前遇到的问题是程序没有执行第一个 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;
}
【问题讨论】:
-
效果很好!非常感谢。我是这个网站的新手,由于您写的是评论而不是答案,我不知道如何给您好评!
标签: c while-loop scanf