用于读取浮点数的 scanf 无法按预期工作

scanf for reading float numbers doesn't work as expected

我从事编程 class 两周以来,在扫描键盘输入并将其分配给 C 中的变量时遇到了一些问题。

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

int main()

{
  float creditSum, interestRate, repayment;

  system("clear");

  printf("\n please enter the total Credit sum: ");
  scanf("%.2f", &creditSum);
  printf("\n Please enter the interest rate: ");
  scanf("%.2f", &interestRate);
  printf("\n Please enter the monthly repayment amount: ");
  scanf("%.2f", &repayment);

  printf("\n\n %.2f | %.2f | %.2f\n\n", creditSum, interestRate, repayment);


   return 0;
}

我可以编译一个 运行 程序但是我得到

user@db10:~/$ ./credit 

 please enter the total Credit sum: 100

 Please enter the interest rate: 
 Please enter the monthly repayment amount: 

 0.00 | 0.00 | 0.00

所以我仍然可以输入 3 个值中的第一个,但未按计划分配给变量。

课程老师让每个人在 windows 机器上的 scanf() 之前添加一个 fflush(stdin) 但这对我不起作用(在 linux 环境中)。

我在这里看到了一些处理 linux 问题上的 fflush 的问题,但无法真正成功地为我的案例应用任何东西(这可能是因为我是一个完全的编码新手)。

有人可以帮忙吗?

老师采取的是“无法解决Linux问题,因为Windows是OS的选择”的方法,所以从那方面没有任何帮助。

scanf 捕获非预期的输入格式。

正确的代码应该是这样的:

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

int main()

{
  float creditSum, interestRate, repayment;

  system("clear");
  

  printf("\n please enter the total Credit sum: ");
  if(scanf("%f", &creditSum)!= 1) return -1;
  printf("\n Please enter the interest rate: ");
  if(scanf("%f", &interestRate)!= 1) return -1;
  printf("\n Please enter the monthly repayment amount: ");
  if(scanf("%f", &repayment)!= 1) return -1;

  printf("\n\n %.2f | %.2f | %.2f\n\n", creditSum, interestRate, repayment);


   return 0;
}

您可能不想只捕获浮点数的小数点后两位。您想要获取浮点数,然后只打印 2 位小数。

无论如何检查 scanf 的 return 值很重要:

On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

因为它可以避免代码上的错误。