2014-03-29 274 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;