繁体   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