2009-06-09 5 views
0

Ce que j'essaie d'accomplir est de générer 100 0 aléatoires et 1 les ajouter tous dans une variable, puis l'imprimer. Ce que j'ai en ce moment je ne sais pas comment faire le travail. Si quelqu'un pouvait expliquer ce que je fais de mal, je serais très reconnaissant.collecter des nombres et les imprimer

randstring (void){ 
    int i; 
    int num; 
    char buffer[101]; 
    i=100; 
    while(i>0, i--){ 
     num = rand()%2; 
     strcpy(buffer, num); 
    } 
    return(buffer); 
} 

Ce que j'est maintenant:

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

main (void){ 
    printf("%f", randstring()); 
} 
randstring (void){ 
    int num; 
    char buffer[101]; 
    int i = 100; 
    while(i-- >= 0) buffer[i] = rand() % 2; 
    return(buffer); 
} 
+0

comme @alamar souligné, vous voulez caractères '0' (= 48) et '1' (= 49) de 0 et 1 –

+1

Et je recommanderais aussi: Ajout de {} à while car il serait plus clair Dropping() de retour, ce n'est pas une fonction. Et! Vous ne pouvez pas retourner le tampon! Vous devez soit l'allouer en statique de manière statique et le passer, soit l'allouer dynamiquement en utilisant randstring (en utilisant malloc) – alamar

+0

chnage buffer [i] = rand()% 2; mettre en mémoire tampon [i] = (rand()% 2)? 'dix'; –

Répondre

6

Que diriez-vous buffer[i] = (rand() % 2) ? '1' : '0'; dans le corps de la boucle?

Et je ferais tampon [100] = 0;

Mais le pire problème est que vous ne pouvez pas retourner le tampon, car dès que votre fonction se termine, elle sera écrasée. Il est alloué sur la pile et la pile est réutilisée lorsque la fonction se termine. Vous devez soit faire malloc et libre, ou passer le tampon et sa longueur à cette fonction.

Ce qui nous donne:

#include <stdio.h> 

#define RAND_LENGTH 100 

char *randstring (char *buffer, int length); 

int main (int a, char **b){ 
    char buffer[RAND_LENGTH + 1]; 
    printf("%s", randstring(buffer, RAND_LENGTH)); 
} 

char *randstring (char *buffer, int length){ 
    int i = length; 
    while(--i >= 0) { 
     buffer[i] = (rand() % 2) ? '1' : '0'; 
    } 
    buffer[length] = 0; 
    return buffer; 
} 
+0

+1. De moi. Pourrait être utile de mettre à jour le code complet? –

+0

encore mieux. joli! –

+0

Une autre correction mineure. – alamar

1

Essayez ceci:

int i = 100; 

while(i-- >= 0) buffer[i] = rand() % 2; 
+1

Ce n'est pas bon: vous remplissez le tampon de caractères avec 0 et 1. Il ne sera pas imprimable. Ce qu'il voulait probablement, c'est '0' et '1'. –

+0

cela fonctionne bien, mais le retour me donne l'erreur de main.c: 35: avertissement: retour rend entier de pointeur sans un cast main.c: 35: avertissement: la fonction renvoie l'adresse de la variable locale tous fait – austin

Questions connexes