2014-03-29 106 views
0

你好,我试图增加浮点指针,但不知何故该程序打印所有的时间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); 
} 

我会很喜欢,如果有人可以帮助我解决它的感谢。

+1

在printf的,你打印号码或一个参考? –

+2

为什么要为单个变量分配内存?为什么不使用简单的'float num = rand()...'?这将顺便解决你的问题。 –

+0

我打印号码 – user3332897

回答

4

注意如果要打印,当你打印地址数量*:

printf("%f",*num); 
3

您需要打印的值NUM点:

printf("%f", *num); 
+0

谢谢我的错误,我没有注意到 – user3332897

0

你程序调用未定义的行为,因为num不是float,而是指向float,并且您试图将其打印为float,由%f转换说明符调用printf。此外,请勿在main的参数列表中输入malloc的结果并明确提及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); 
} 
1

两件事情:

  1. 不要投在C本malloc(无关的问题,但仍然a good idea
  2. 启用编译器警告

做这两件事将帮助您避免问题。与gcc -Wall编译我得到:

警告:格式“%f的期望类型的 '双重' 的说法,但参数2具有键入 '浮动*'[-Wformat =] 的printf( ”%F“,NUM );

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

printf("%f", *num); 
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 
} 

无论如何,最好只使用一个简单的浮动。

1

除了修复printf("%f", *num);,你需要检查你的数学!

如果你真的想和12.01之间-13.00结果,

*num = (rand() % 2501 - 1300)/100.00;