gpt4 book ai didi

c - "watches"调试工具上的错误值

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:06 24 4
gpt4 key购买 nike

当我使用实数值(float 和 double 类型)编写程序时,我遇到了一些错误。当将“real”声明为 double 时,在 watch 调试工具中,相对于此变量的值不会以可理解的方式显示。此外,该程序没有给我正确的输出,我想知道为什么。

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

int main()
{
int i,integer;
double real = 0;
double average = 0;

printf("enter a real value: ");
scanf("%f",&real);

for (i=0; average < real; i++){

printf("enter an integer: ");
scanf("%d",&integer);
average = float((average+integer)/(i+1));
}
printf("\n%d numbers have been added!", i);
printf("\nthe average of all entered numbers is: %.2f",average);

return 0;
}

有些变量无法对应,因为我现在已经翻译了它,以便您更容易理解。

我试过使用转换运算符,删除它们,在声明中使用 float 和 double 没有得到可接受的结果(并且程序也不会工作)

编辑:程序现在可以运行,但仍然有一些数学问题,结果不是我所期待的 http://i.stack.imgur.com/Zl9dJ.jpg

最佳答案

当我用 GCC 编译你的代码时,我得到了这个:

gcc -Wall -std=gnu99 -Wextra -Werror -g -O3 -o q q.c
cc1: warnings being treated as errors
q.c: In function ‘main’:
q.c:10:5: error: format ‘%f’ expects type ‘float *’, but argument 2 has type ‘double *’
q.c:16:19: error: expected expression before ‘float’
make: *** [q] Error 1

那些警告标志很有用。要修复第 10 行的错误,请像评论中所说的那样使用“%lf”。

第 16 行的错误是因为 float 不是函数。您可以像这样使用类型转换:

average = (float)((average+integer)/(i+1))

但这只是将结果转换为 float 。如果你想用 float 学而不是转换为 float 的整数数学来实际进行数学运算,你需要浮点操作数。最简单的做法是使用浮点文字:

average = (average+integer)/(i+1.0)

实际上,由于 average 已经是 double ,所以无论如何您都将使用此表达式进行 float 学运算。尽管正如 gnometorule 在评论中指出的那样,这可能不是您想要进行的计算。您可能希望对输入的所有数字求和,然后除以最后的数字。这会让你得到平均值。

您还想在最后一个 printf 的末尾打印一个换行符:

printf("\nthe average of all entered numbers is: %.2f\n",average);

说到调试,我对Watches一窍不通,gdb是这样做的:

(gdb) p real
$1 = 7.2999999999999998
(gdb) p average
$3 = 121.14920634920635

您可能希望在关闭优化的情况下进行编译,以便在调试器中获得更完整的信息,但 double 应该可以很好地打印出来。如果您正在查看包含它们的内存,则需要查看 [IEEE 754]。

关于c - "watches"调试工具上的错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24311946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com