2010-04-28 4 views
0

mon programme fait un nom au hasard qui pourrait avoir az ce code fait un nom 16 char mais :(mon code ne fera pas le nom et idk pourquoi :(quelqu'un peut me montrer ce qui ne va pas avec ça?comment faire un nom à partir de nombres aléatoires?

char name[16]; 
void make_random_name() 
{ 

    byte loop = -1; 

    for(;;) 
    { 
     loop++; 

     srand((unsigned)time(0)); 
     int random_integer; 

     random_integer = (rand()%10)+1; 

     switch(random_integer) 
     { 
     case '1': name[loop] = 'A'; 
      break; 
     case '2': name[loop] = 'B'; 
      break; 
     case '3': name[loop] = 'C'; 
      break; 
     case '4': name[loop] = 'D'; 
      break; 
     case '5': name[loop] = 'E'; 
      break; 
     case '6': name[loop] = 'F'; 
      break; 
     case '7': name[loop] = 'G'; 
      break; 
     case '8': name[loop] = 'Z'; 
      break; 
     case '9': name[loop] = 'H'; 
      break; 
     } 

     cout << name << "\n"; 

     if(loop > 15) 
     { 
      break; 
     } 

    } 


} 

Répondre

4

random_integer est un entier, vous le comparez à un tas de caractères du jeu de caractères ASCII - '1' car un littéral de caractère est en fait 49 en décimal, 49 n'étant pas dans la plage de vos nombres aléatoires, il ne sera jamais touché. Essayez de modifier vos déclarations de cas en

case 1: ... 

au lieu de

case '1': ... 
+0

... lol xD ok bien je vais essayer – blood

+0

hmm bien il fonctionne, mais tous sont un omble chevalier comme h ou z: \ – blood

+1

@blood C'est probablement parce que vous appelez 'srand' dans la boucle. La boucle entière s'exécute avant que 'time (0)' ne change, donc vous gravez le RNG avec la même valeur à chaque fois et obtenez le même nombre aléatoire à chaque fois. Notez également que 'rand()% 10 + 1' donne des nombres de 1 à 10; vous n'avez pas couvert tous ces cas dans votre commutateur. –

2
srand((unsigned)time(0)); 

Prenez ceci de la boucle for, vous devez ensemencer une seule fois.

case '1': 

1 ne signifie pas entier 1, c'est plutôt le caractère 1 qui se traduit par (ascii) en entier 49. Modifier à -

case 1 : 
+0

o lol oui cela a également corrigé xD tyvm – blood

2

Ou tout simplement utiliser

char name[16]; 
for (i = 0; i < sizeof name; ++i) { 
    name[i] = "ABCDEFGHIJ"[rand() % 10]; 
} 
+0

ew, tableau de caractères – Inverse

0

Il y a tellement de choses qui ne vont pas que je vais les énumérer:

  1. Vous ne terminez pas la chaîne par null.
  2. Vous utilisez inutilement une instruction switch pour des données qui pourraient très facilement être effectuées avec l'indexation de tableau. Vous appelez srand en boucle.
  3. for(;;) { i++ ... - Vraiment?
+0

... c'est un projet home O_o et ... votre aide pas du tout ... – blood

+0

Le bit à propos de null terminant votre chaîne est important, même si cette réponse est assez agressive - il y a beaucoup de devoirs et de questions pour les débutants ici, et la plupart d'entre eux n'ont même pas de solution. edit: en fait, vous vous êtes déjà occupé de null terminant votre chaîne car elle est globale. Ça ne fait rien. – kibibu

+0

: \ ok = 33333333 – blood

Questions connexes