【发布时间】:2015-04-14 14:38:22
【问题描述】:
刚开始学C,因为把scanf和printf混在一起,一不小心写了这样的代码:
float loan = 0.0f; // loan
float rate = 0.0f; // monthly interest rate
float mpay = 0.0f; // monthly pay
printf("Enter amount of loan: ");
scanf("%.2f",&loan); // I am supposed to write scanf("%f",&loan), I was trying to take a float input with two digits after point
printf("Enter interest rate: ");
scanf("%.2f",&rate); // similar here
printf("Enter monthly payment: ");
scanf("%.2f",&mpay); // similar here
我希望这段代码会显示三个输入提示,每个提示都会挂起并在那里等待,直到我输入一些输入并按 Enter 键。但是发生的情况是,只有第一个提示在等待我的输入,然后当我按下回车键时,第二个和第三个提示很快就出现了,而无需等待我的输入,就好像代码从其他地方得到了我的输入一样。后来,当我检查三个应该保存三个输入的变量的值时,它们实际上都没有存储输入值。
我回到我的 C 书并意识到我将printf 的最小字段和精度参数概念与scanf 混合在一起,所以我猜scanf 没有这样的语法?但是如果是这样,那么为什么编译器会编译,这是否意味着 scanf 也存在这样的语法,或者我对此有误?我应该如何解释这种不等待我的第二个和第三个输入并且不将输入存储到三个变量中的奇怪行为?
【问题讨论】:
-
在所有 3 个 scanfs 之后您是否打印了值?
-
scanf不包含浮点数精度字段。您的代码不能使用 gcc 编译,并且在删除.2时可以正常工作。我无法解释你的行为。
标签: c