谁能告诉我为什么我的 scanf
函数只工作一次并且以连续循环结束。
#include <stdio.h>
#include <conio.h>
int main(void)
{
int accno;
float bbal, charge, rebate, limit, balance;
printf("Enter account number (-1 to end):");
scanf("%d", &accno);
while (accno != -1) // User input phase
{
printf("Enter beginning balance:"); // User input phase
scanf(" %.2f ", &bbal); // leave space after scanf("
printf("Enter total charges:");
scanf(" %.2f ", &charge);
printf("Enter total rebates:");
scanf(" %.2f ", &rebate);
printf("Enter credit limit:");
scanf(" %.2f ", &limit);
balance = bbal - charge + rebate;
// credit limit exceeded phase
if (balance > limit)
{
printf("Account: %u", accno);
printf("Credit limit: %.2f", limit);
balance = bbal - charge + rebate;
printf("Balance: %.2f", balance);
printf("Credit limit exceeded!");
}
printf("Enter account number (-1 to end):");
scanf("%d", &accno);
}
getch();
}
最佳答案
当我尝试编译问题中的代码时,收到一条警告,指出 scanf 格式字符串 %.2f
非法。如果我将其更改为 %f
(也需要删除前导空格和尾随空格),那么一切都会按预期开始工作。我在 Mac 上使用 clang,但它应该与 Windows 相同。
/Users/jeremyp/dev/foo/foo.m:19:18: warning: invalid conversion specifier '.' [-Wformat-invalid-specifier]
scanf(" %.2f ", &charge);
~~^
无论如何,正如其中一条评论所述,货币不是 float 。存储货币的方法有很多,可能最好的是大整数类型,例如64 位 int 即可,但以美分或便士或您选择的货币中的任何最低面额单位存储货币。
关于C 编程 - While 循环和 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32525757/