【问题标题】:My height and length doesn't save the value that i give我的身高和长度并没有保存我给出的价值
【发布时间】:2021-06-17 21:45:51
【问题描述】:

每次打印高度或长度时,值为0。就像C不保存xHeight,yHeight,xLength或yLength的值一样。我查了一下,我认为不是语法问题。

#include <stdio.h>
#include <stdlib.h>

int main()
{

float xHeight,yHeight,xLength,yLength, height = 0.0, length = 0.0;

printf("Tell me the x and y: \n");
scanf(" %.2lf", &xHeight);
fflush(stdin);
scanf("%.2lf",&yHeight);
fflush(stdin);


height = xHeight - yHeight;;
printf("\n%.2lf",height);

printf("Now tell me another x and y: \n");
scanf(" %.2lf", &xLength);
fflush(stdin);
scanf("%.2lf",&yLength);
fflush(stdin);


length = xLength - yLength;
printf("\n%.2lf", length);

printf("\n==========================================\n");


printf("The perimeter of this rectangle is %.2lf", 2*(length+height));

return 0;
}

【问题讨论】:

  • Warnings。他们是your friends
  • 如果您的编译器没有就这些 scanf 调用向您发出警告,请打开警告选项直到它发出警告。 -Wall -Wextra 是 GCC 和 clang 的良好开端。
  • 另外,在尝试使用它设置的变量之前,请务必检查 scanf 的返回值是否有错误。而fflush(stdin); 是未定义的。
  • 您用于scanf 的格式说明符是%.2lf,但对于普通的float 应该是%.2flf 代表double
  • Ether 在您的 scanf 调用中将 lf 更改为 f,或者将您的浮点类型更改为 double(无论如何我都会这样做 - 很少需要使用 @987654336 @)。

标签: c scanf


【解决方案1】:

%.2lf 不是float 的正确转换规范。应该没有.2,因为scanf 不使用精度量,它应该是f 而不是lf,因为f 是指向float 的指针,而lf 是指向double 的指针。

scanf 中的%f 之前也不需要空格字符; %f 转换会自动跳过初始空白。

在其他 scanf 调用中使用 scanf("%f", &amp;xHeight); 和类似方法。

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多