2016-04-04 4 views
-1

Ich versuche eine Funktion zu implementieren, die einen Würfel eine bestimmte Zeit lang würfeln soll.Wie sollte ich eine RolleDice() -Funktion in C implementieren?

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int * rollDice(int len) //len = times the dice is rolled. 
{ 
    int ints[len]; 

    int i = len-1; 


    while(i>0) 
    { 

     ints[i--] = (rand()%6)+1; 

    } 

    return ints; 
} 


int main(int argc, const char * argv[]) 
{ 


    int * ints = rollDice(10); 

    for(int i =0; i<10; i+=1) 
    { 
     printf("%d ",*(ints+i)); 
    } 
    return 0; 
} 

Programm druckt immer dies, ist meine Vorstellung von Zeigern falsch?

104 0 0 0 1919706998 2036950640 1667723631 1836545636 16 48 
+0

'ints' ist a ** ** lokale Variable. Vielleicht sollten Sie ein oder zwei Minuten damit verbringen, über die Implikationen dieses Adjektivs nachzudenken. – Olaf

Antwort

2

können Sie dies nicht

return ints; 

Es auf dem Stapel deklariert wird. Sie müssen es entweder mit genügend Speicher übergeben oder den Speicher in der Funktion mit malloc zuweisen und es zurückgeben.

int * rollDice(int len) //len = times the dice is rolled. 
{ 
    int *ints = malloc(sizeof(int) * len); 
    int i = len-1; 
    while(i>0) 
    { 
     ints[i--] = (rand()%6)+1; 
    } 
    return ints; 
} 
+0

Sollte ich malloc? – Aleks

+0

Vielleicht statisches Schlüsselwort? Funktioniert es in C? –

+0

Ich habe gerade den Code hinzugefügt, den Sie brauchen. Hinweis, mallocing und zurück zu übergeben wird manchmal als schlechte Praxis, dh es kann dazu führen, dass Code, der schwer zu lesen ist und gut dokumentiert werden muss usw. In diesem Fall ist es in Ordnung. – Harry

0

Harrys Antwort ist richtig; Sie können die Adresse einer lokalen Variablen nicht zurückgeben. Diese Variable wird zerstört, sobald die Funktion zurückkehrt.

Anstelle des Speichers in der Funktion zuzuordnen ist, nur das Array übergeben, um in der Funktion gefüllt werden:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

#define NUM_DICE 10 

void rollDice(int *dice, int num_dice) 
{ 
    int i; 

    for (i = 0; i < num_dice; i++) { 
     dice[i] = (rand() % 6) + 1; 
    } 
} 


int main(int argc, const char * argv[]) 
{ 
    int dice[NUM_DICE]; 

    srand(time());  /* Don't forget this! */ 

    rollDice(&dice, NUM_DICE); 

    for(int i = 0; i < NUM_DICE; i++) 
    { 
     printf("%d ", dice[i]); /* Easier to use brackets than pointer arithmetic. */ 
    } 

    return 0; 
} 
Verwandte Themen