C 随机和指针不';行不通
您好,我正在尝试将浮点值增加到指针,但不知怎的,程序始终打印0.00000。 数字应在12.01至-13.00之间绘制 我的代码-C 随机和指针不';行不通,c,pointers,C,Pointers,您好,我正在尝试将浮点值增加到指针,但不知怎的,程序始终打印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() % 13
#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);
}
#包括
#包括
#包括
int main()
{
float*num=(float*)malloc(sizeof(float));
srand(时间(空));
*num=rand()%1300+1201/100.00;
printf(“%f”,num);
系统(“暂停”);
自由(num);
}
如果有人能帮我修一下,我会很高兴的。谢谢。请注意*如果您想在打印地址时打印号码:
printf("%f",*num);
您需要打印num指向的值:
printf("%f", *num);
程序调用未定义的行为是因为
num
不是float
而是指向float
的指针,并且您试图通过%f
调用中的%f
转换说明符将其打印为float
。另外,不要强制转换malloc
的结果,并在main
的参数列表中明确提到void
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
float *num = malloc(sizeof *num);
srand(time(NULL));
*num = rand() % 1300 + 1201 / 100.00;
printf("%f", *num); // note *num instead of num
system("PAUSE");
free(num);
}
#包括
#包括
#包括
内部主(空){
float*num=malloc(sizeof*num);
srand(时间(空));
*num=rand()%1300+1201/100.00;
printf(“%f”,*num);//注意*num而不是num
系统(“暂停”);
自由(num);
}
两件事:
malloc
(与你的问题无关,但尽管如此)%f
格式说明符,但传递的是指针,而不是浮点
或双精度
。您需要取消对指针的引用:
printf("%f", *num);
这些是错误:
*num=rand()%1300+1201/100.00代码>
在[12.011311.01]范围内。如果需要[12.01,13.00]范围内的数字,请更改分配:*num
*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
}
无论如何,最好只使用一个简单的浮点。除了修复
printf(“%f”,*num)代码>,您需要检查您的数学
如果您确实希望结果介于12.01和-13.00之间
*num = (rand() % 2501 - 1300) / 100.00;
在printf中,您是在打印数字还是对数字的引用?为什么要为单个变量分配内存?为什么不使用simplefloat num=rand()…
?这将顺便解决您的问题。不,您没有打印数字。我分配内存是因为我检查了一些事情…*num=(rand()%100+1201)/100.00代码>谢谢我的错误我没有注意到