-1

我正在编写一个需要做一些算术运算的程序。

这是我到目前为止所拥有的:

#include <stdio.h>
int main(void){
    double h, x, n;
    printf("enter h > ");
    scanf("%1f", &h);
    printf("enter x > ");
    scanf("%1f", &x);
    /* here's where I believe I'm encountering an error */
    n = x/h;

    return 0;
}

所以假设我输入 h = 0.01 和 x = 0.25,我应该得到 n = 0.25/0.01 = 25 对吗?

我试过类型转换:

n = (float)x/(float)h;

但它不起作用......

4

4 回答 4

3

您在 scanf 调用中已经写%1f了(这是一个数字),但是双精度的正确格式是%lf(这是一个小写的 L)。

因此,您的数字没有正确转换为双精度数,并且您不能期望得到正确的结果。

于 2012-09-15T17:18:03.633 回答
1

问题可能是由于scanf。我建议改用 fgets 。但是尝试:

int main(void){
    float h, x, n;
    printf("enter h > ");
    scanf("%f", &h);
    getchar();
    printf("enter x > ");
    getchar();
    scanf("%f", &x);

    n = x/h;

    return 0;
}
于 2012-09-15T17:10:34.120 回答
0

原因是您已将 h,x,n 声明为 double,然后将其分配给 float.try 在变量声明中使用 float

#include <stdio.h>
int main(void){
float h, x, n;
printf("enter h > ");
scanf("%f", &h);
printf("enter x > ");
scanf("%f", &x);

n = x/h;
printf("%f",n);
return 0;

}

于 2012-09-15T17:17:08.863 回答
0

我的评论l尝试读取double输入时需要指定修饰符。

#include <stdio.h>

inline int flush() {
  return fflush(stdout);
}

int main() {
  double x, h, n;

  printf("enter h> ");
  flush();
  scanf("%lf", &h);

  printf("enter x> ");
  flush();
  scanf("%lf", &x);

  n = x / h;
  printf("n: %lf\n", n);
}
于 2012-09-15T17:19:32.683 回答