您好我正在尝试将浮点数增加到指针但不知何故该程序始终打印0.00000。 该数字应在12.01至-13.00之间绘制。
我的代码 -
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
float* num = (float*)malloc(sizeof(float));
srand(time(NULL));
*num = rand() % 1300 + 1201 / 100.00;
printf("%f",num);
system("PAUSE");
free(num);
}
如果有人能帮助我解决这个问题,我很乐意。
答案 0 :(得分:4)
如果您要在打印地址时打印号码,请注意*:
printf("%f",*num);
答案 1 :(得分:3)
您需要打印num指向的值:
printf("%f", *num);
答案 2 :(得分:1)
两件事:
malloc
投射到C中(与您的问题无关,但a good idea仍然存在)执行这两项操作可以帮助您避免出现问题。使用gcc -Wall
进行编译我得到:
警告:格式'%f'需要类型为'double'的参数,但参数2的类型为'float *'[-Wformat =] 的printf( “%F”,NUM);
哪个会回答你的问题。您使用的是%f
格式说明符,但传递的是指针,而不是float
或double
。你需要取消引用你的指针:
printf("%f", *num);
答案 3 :(得分:1)
这些是错误:
*num = rand() % 1300 + 1201 / 100.00;
*num
位于[12.01,1311.01]范围内。如果您需要[12.01,13.00]范围内的数字,请更改作业:
*num = 12.01 + (rand() % 100) / 100.0;
printf("%f", num);
应为printf("%f", *num);
在编译期间启用额外警告也是一个好主意。例如。与-Wall -Wextra
clang -Wall -Wextra filename.c
warning: format specifies type 'double' but the argument has type 'float *' [-Wformat]
与gcc相同
gcc -Wall -Wextra filename.c
warning: format '%f' expects argument of type 'double', but argument 2 has type 'float *' [-Wformat=]
如果您正在玩malloc
/ free
,则应检查分配失败。
不保证内存分配成功,而是可以返回空指针。如果没有检查是否实现了成功的分配,这通常会导致程序崩溃,因为空指针取消引用会导致分段错误。
所以你可以用这种方式改变你的代码:
float *num = malloc(sizeof(float));
if (num)
{
// your code
}
else
{
// handle failure
}
无论如何,最好只使用一个简单的浮子。
答案 4 :(得分:1)
除了修复printf("%f", *num);
之外,还需要检查数学!
如果你真的想要12.01和-13.00之间的结果,
*num = (rand() % 2501 - 1300) / 100.00;
答案 5 :(得分:0)
您的程序会调用未定义的行为,因为num
不是float
,而是指向float
的指针,并且您试图通过float
将其打印为%f
} printf
调用中的转换说明符。另外,请勿在{{1}}的参数列表中投射malloc
的结果并明确提及void
。
main