当用户在保持 float 变量的 scanf 中输入字符串时出错
Get error when user has input a string in a scanf that keep float variable
我现在正在练习c编程,我做了一些BMI计算器。它工作得很好,但是当用户在第一个 scanf
上输入字符串或字符时,将数据发送到浮点变量 'weight' 。之后它通过了所有 scanf
并向我显示错误 Your BMI is 1.#J
。如何解决这个错误?这是我的代码。
#include <stdio.h>
int main()
{
float weight;
float height;
float result;
float c_height;
printf("Enter your weight as kilogram...\n\n> ");
scanf("%f",&weight);
//If user input char or string , it passed all thing and showed error.
printf("\nEnter your height as centimetres...\n\n> ");
scanf("%f",&height);
c_height=(height/100)*(height/100);
result=weight/c_height;
if(result<18.50)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are underweight! Try to eat more frequently\n\n");
printf("Thank you for using my program!\n\n");
}else if(result>=18.50 && result<22.90)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are healthy! Keep eating healthy\n\n");
printf("Thank you for using my program!\n\n");
}else if(result>=22.90 && result<24.90)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are a little overweight! Avoid eating some fat and an oil\n\n");
printf("Thank you for using my program!\n\n");
}else if(result>=24.90 && result<29.90)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are overweight! Avoid eating fat and do exercise often\n\n");
printf("Thank you for using my program!\n\n");
}else if(result>=29.90)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are obese! Do exercise everyday and eat carefully!\n\n");
printf("Thank you for using my program!\n\n");
}else
{
printf("Error occured!!");
}
return 0;
}
scanf 将 return 读入的值的数量,因此在您的示例中应该是一个,因为您正在读取单个浮点值。
您可以检查 scanf returns 那个值,如果它没有进行某种恢复,例如读取到行尾:
while(scanf("%f",&height) != 1)
{
int c;
while((c = getchar()) != '\n' && c != EOF)
;
printf("Enter your weight as kilogram...\n\n> ");
}
要传递给下一个参数,请在 scanf 之后添加一个 fflush(stdin) :
scanf("%f",&weight);
fflush(stdin);
并且您需要像这样控制输入:
if (scanf("%lf", &weight) == 1)
printf("It's float: %f\n", weight);
else
printf("It's NOT float ... \n");
我现在正在练习c编程,我做了一些BMI计算器。它工作得很好,但是当用户在第一个 scanf
上输入字符串或字符时,将数据发送到浮点变量 'weight' 。之后它通过了所有 scanf
并向我显示错误 Your BMI is 1.#J
。如何解决这个错误?这是我的代码。
#include <stdio.h>
int main()
{
float weight;
float height;
float result;
float c_height;
printf("Enter your weight as kilogram...\n\n> ");
scanf("%f",&weight);
//If user input char or string , it passed all thing and showed error.
printf("\nEnter your height as centimetres...\n\n> ");
scanf("%f",&height);
c_height=(height/100)*(height/100);
result=weight/c_height;
if(result<18.50)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are underweight! Try to eat more frequently\n\n");
printf("Thank you for using my program!\n\n");
}else if(result>=18.50 && result<22.90)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are healthy! Keep eating healthy\n\n");
printf("Thank you for using my program!\n\n");
}else if(result>=22.90 && result<24.90)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are a little overweight! Avoid eating some fat and an oil\n\n");
printf("Thank you for using my program!\n\n");
}else if(result>=24.90 && result<29.90)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are overweight! Avoid eating fat and do exercise often\n\n");
printf("Thank you for using my program!\n\n");
}else if(result>=29.90)
{
printf("\nYour BMI is %.2f\n\n",result);
printf("You are obese! Do exercise everyday and eat carefully!\n\n");
printf("Thank you for using my program!\n\n");
}else
{
printf("Error occured!!");
}
return 0;
}
scanf 将 return 读入的值的数量,因此在您的示例中应该是一个,因为您正在读取单个浮点值。
您可以检查 scanf returns 那个值,如果它没有进行某种恢复,例如读取到行尾:
while(scanf("%f",&height) != 1)
{
int c;
while((c = getchar()) != '\n' && c != EOF)
;
printf("Enter your weight as kilogram...\n\n> ");
}
要传递给下一个参数,请在 scanf 之后添加一个 fflush(stdin) :
scanf("%f",&weight);
fflush(stdin);
并且您需要像这样控制输入:
if (scanf("%lf", &weight) == 1)
printf("It's float: %f\n", weight);
else
printf("It's NOT float ... \n");