c - 计算错误? C编程初学者

标签 c

我正在通过一本指南学习 C,而且我很享受它。 然而,有一个问题让我困惑不已。

问题是:

“编写一个程序,当写入数字“x”和数字“y”时,程序显示 x 占 y 的百分比。”

“当 x = 54 且 y = 84 时,答案应为 64 %”

显然,54/84 = 0.64... * 100,大约是 64%。 但是,当我运行程序时,它显示 84.689699。 我在没有“*100”的情况下进行了测试,但什么也没有。它显示 0.84689699...

是我的程序有问题还是编译器的问题还是什么? 我是初学者,如果有人告诉我哪里出了问题,那将会非常有帮助。

PS:我使用atom.io和gcc-compiler

#include <stdio.h>

int main(void)
{
  double vx;
  double vy;

  printf("Enter the 1st number : "); scanf("%f" , &vx);
  printf("Enter the 2nd number : "); scanf("%f" , &vy);

  printf("\a\n\nx is %f of y" , vx / vy * 100);
  return 0;
}

最佳答案

虽然 scanf 是一个可变参数函数,但输入无法提升。scanf 将指针作为输入,因此您需要指定它%lf 。如果输入是变量而不是指针,C 会将 float 提升为 double。在您的程序中,scanf 函数具有 %f 而不是 %lf。下面的代码工作正常,在 MinGW 上输出为 64.285714

另外,请参阅链接 Correct format specifier for double in printf

int main(void)
{
  double vx;
  double vy;

  printf("Enter the 1st number : "); scanf("%lf" , &vx);
  printf("Enter the 2nd number : "); scanf("%lf" , &vy);

  printf("\a\n\nx is %f of y" , vx / vy * 100);
  return 0;
}

关于c - 计算错误? C编程初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45968041/

相关文章:

c - 如何将 ZeroMQ 套接字集成到 glib 主循环中?

c++ - C/C++ 对结构体中的结构体数组进行 qsort

c - 结构数组操作

c - 使用cantools生成C文件

c - 调用者看不到函数中的变量更改?

c++ - 为什么这个数组分配给非指定数组?

c - 如何在 C 中将文件中的数字字符串作为单独的整数存储在数组中

c - malloc() 对于结构中的指针不会将内存绑定(bind)到声明的大小

java - 通过 java 代码编译 C 源代码

c++ - 加权有向图中从节点返回自身的最短距离