2010-04-28 42 views
0

我的程序,使一個隨機的名字,可能有AZ該代碼使得16字符的名稱,但 :(我的代碼不會讓名稱和IDK的爲什麼:(誰能告訴我有什麼錯呢?如何從隨機數字中創建一個名稱?

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; 
     } 

    } 


} 

回答

4

random_integer是一個整數,你將它與ASCII字符集中的一串字符進行比較 - '1'由於字符文字實際上是十進制的49,因爲49不在你的隨機數字範圍內,所以它不會被擊中。

嘗試將您的病例語句更改爲

case 1: ... 

代替

case '1': ... 
+0

...笑的xD很好確定讓我來試試 – blood 2010-04-28 02:04:25

+0

嗯以及它運行,但所有這些都是一個字符如H或Z:\ – blood 2010-04-28 02:06:41

+1

@blood這可能是因爲您呼叫'內循環srand'。整個循環在'time(0)'改變之前運行,所以你每次都用相同的值播種RNG,每次得到相同的隨機數。還要注意'rand()%10 + 1'給出1到10之間的數字;您沒有在交換機中涵蓋所有這些情況。 – 2010-04-28 02:12:26

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

拿這個出來的for循環,你需要一次唯一的種子吧。

case '1': 

1並不意味着整數1,而這是性格1它轉換(ASCII)整數49. 將其更改爲 -

case 1 : 
+0

o lol yea這也解決了它xD tyvm – blood 2010-04-29 18:55:47

2

或者只是使用

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

ew,字符數組 – Inverse 2010-04-28 03:52:08

0

有這麼多的錯誤,我會列出他們:

  1. 您不能null終止字符串。
  2. 您不必要地使用switch語句來處理非常容易通過數組索引進行處理的數據。
  3. 您正在循環調用srand
  4. for(;;) { i++ ... - 真的嗎?
+0

...這是一個家庭項目O_o和...你根本沒有幫助...... – blood 2010-04-28 02:21:39

+0

關於null終止你的字符串的位很重要,即使這個答案非常討厭 - 這裏有很多家庭作業和初學者問題,其中大多數甚至沒有解決方案。編輯:實際上,你已經注意到了null,因爲它是全局的,所以它終止了你的字符串。沒關係。 – kibibu 2010-04-28 02:33:59

+0

:\ ok = 33333333 – blood 2010-04-28 02:40:19

相關問題