簡體   English   中英

使用 printf() 到 output 正確的小數位數?

[英]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是小數點后的位數。 在您的用例中, %.1fprintf("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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM