[英]Using printf() to output the correct number of decimal places?
当我输入2
时,我希望得到这个 output:
value: 2.4
但是当我做乘法时,我得到这个:
value: 2.400000
这是我的代码:
#include <stdio.h>
int main()
{
float num;
float result;
printf("Number: ");
scanf("%f", &num);
result = num * 1.2;
printf("Result: %f", result);
}
我能做什么?
您可以使用%.Nf
指定要在小数点后打印的位数,其中N
是小数点后的位数。 在您的用例中, %.1f
: printf("Result: %.1f", result)
。
您的代码中还有其他一些问题。 您正在使用scanf()
,但您没有检查它的返回值。 这可能会导致您的代码中断。
scanf()
返回它成功解析的 arguments 的数量。 如果出于任何原因它失败了,它不会改变你给它的 arguments,它会保持输入缓冲区完好无损。 这意味着每当您再次尝试从输入缓冲区读取时,它将自动失败,因为
这将导致无限循环。
要解决此问题,您需要清除输入缓冲区以防scanf()
失败。 通过清除缓冲区,我的意思是读取并丢弃所有内容,直到遇到换行符(当您之前按下Enter时)。
void getfloat(const char *message, float *f)
{
while (true) {
printf("%s: ", message);
int rc = scanf("%f", f);
if (rc == 1 || rc == EOF) break; // Break if the user entered a "valid" float number, or EOF is encountered.
scanf("%*[^\n]"); // Read an discard everything up until a newline is found.
}
}
你可以像这样在你的 main 中使用它:
int main(void) // Note the void here when a function doesn't take any arguments
{
float num;
float result;
getfloat("Number", &num);
result = num * 1.2;
printf("Result: %.1f", result); // Print only one digit after the decimal point.
}
样本 output:
Number: x
Number: x12.45
Number: 12.75
Result: 15.3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.