[英]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.