随机和指针不起作用

时间:2014-03-29 10:50:40

标签: 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() % 1300 + 1201 / 100.00;

    printf("%f",num);
    system("PAUSE");

    free(num);
}

如果有人能帮助我解决这个问题,我很乐意。

6 个答案:

答案 0 :(得分:4)

如果您要在打印地址时打印号码,请注意*:

printf("%f",*num);

答案 1 :(得分:3)

您需要打印num指向的值:

printf("%f", *num);

答案 2 :(得分:1)

两件事:

  1. 请勿将您的malloc投射到C中(与您的问题无关,但a good idea仍然存在)
  2. 启用编译器警告
  3. 执行这两项操作可以帮助您避免出现问题。使用gcc -Wall进行编译我得到:

      

    警告:格式'%f'需要类型为'double'的参数,但参数2的类型为'float *'[-Wformat =]      的printf( “%F”,NUM);

    哪个会回答你的问题。您使用的是%f格式说明符,但传递的是指针,而不是floatdouble。你需要取消引用你的指针:

    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