2015-04-06 82 views
-3

我試圖用C++做撲克,但是當我試圖擺脫卡片時,它顯示值-858993460後面跟着一個奇怪的符號。雖然這不會每次都發生。我想知道爲什麼這會顯示爲這個值。下面是代碼:在變量錯誤地存儲大,負數顯示一個很大的負數(C++)

int ridcard1 = 0; 
int ridcard2 = 0; 
int ridcard3 = 0; 
int ridcard4 = 0; 
int ridcard5 = 0; 

    cout << "These are your cards. Which would you like to get rid of? Enter a card number.\n" << "WHEN YOU ARE DONE, ENTER CARD 0\n"; 
    cout << "\n >> Card Number: "; 
    cin >> ridcard1; 
    if (ridcard1 != 0){ 
     cout << "\n >> Card Number: "; 
     cin >> ridcard2; 
     if (ridcard2 != 0){ 
      cout << "\n >> Card Number: "; 
      cin >> ridcard3; 
      if (ridcard3 != 0){ 
       cout << "\n >> Card Number: "; 
       cin >> ridcard4; 
       if (ridcard4 != 0){ 
        cout << "\n >> Card Number: "; 
        cin >> ridcard5; 
       } 
       else{ 
        cout << "\n"; 
       } 
      } 
      else { 
       cout << "\n"; 
      } 
     } 
     else { 
      cout << "\n"; 
     } 
    } 
    else { 
     cout << "\n"; 
    } 



    if (ridcard1 == 1 || ridcard2 == 1 || ridcard3 == 1 || ridcard4 == 1 || ridcard5 == 1){ 
     ucard1_rand = rand() % 52; 
     ucard1 = ucard1_rand[cards]; 
     usuitrand1 = rand() % 4; 
     usuit1 = usuitrand1[suits]; 
    } 
     else{ 
      cout << ""; 
     } 
    if (ridcard1 == 2 || ridcard2 == 2 || ridcard3 == 2 || ridcard4 == 2 || ridcard5 == 2){ 
     ucard2_rand = rand() % 52; 
     ucard2 = ucard2_rand[cards]; 
     usuitrand2 = rand() % 4; 
     usuit2 = usuitrand2[suits]; 
    } 
     else{ 
      cout << ""; 
     } 
    if (ridcard1 == 3 || ridcard2 == 3 || ridcard3 == 3 || ridcard4 == 3 || ridcard5 == 3){ 
     ucard3_rand = rand() % 52; 
     ucard3 = ucard3_rand[cards]; 
     usuitrand3 = rand() % 4; 
     usuit3 = usuitrand3[suits]; 
     } 
     else{ 
      cout << ""; 
     } 
    if (ridcard1 == 4 || ridcard2 == 4 || ridcard3 == 4 || ridcard4 == 4 || ridcard5 == 4){ 
     ucard4_rand = rand() % 52; 
     ucard4 = ucard4_rand[cards]; 
     usuitrand4 = rand() % 4; 
     usuit4 = usuitrand4[suits]; 
     } 
     else{ 
      cout << ""; 
     } 
    if (ridcard1 == 5 || ridcard2 == 5 || ridcard3 == 5 || ridcard4 == 5 || ridcard5 == 5){ 
     ucard5_rand = rand() % 52; 
     ucard5 = ucard5_rand[cards]; 
     usuitrand5 = rand() % 4; 
     usuit5 = usuitrand5[suits]; 
     } 
     else{ 
      cout << ""; 
     } 
+0

這通常表示您有一些未初始化的變量。 –

+0

我找不到任何未初始化的變量......他們都設置。 –

+0

'cards'在哪裏初始化?我找不到它。 –

回答

1

兩個常見的原因是:

  1. Uninitialized variables(如πάνταῥεῖ上述解釋),其中一個被聲明,但不是一個可變初始化用一個任意值
  2. Integer overflow,其中試圖將存儲值過大的可變會使其「翻轉」,而是存儲大量負數
開始

如果沒有真正看到程序的某些示例輸入/輸出,很難給出更具體的建議,特別是因爲上面鏈接的代碼沒有(不應該,反正!)實際上打印出任何卡相關變量的內容。

您可以粘貼您的程序的樣本執行,包括您提供的輸入值和程序的任何輸出嗎?

+0

當然...它顯示了我擁有的卡片,從最小到最大編號。然後詢問我想擺脫哪些牌,最多5次。如果我輸入3張或更多卡片,則表明卡片2,3和4具有這個大的負整數。 –

+1

我被困在試圖弄清楚「它表明卡2,3和4有這個大的負整數」的含義。我猜你指的是打印出所選卡片的後續代碼,但我無法確定,因爲我沒有完整的程序來查看,也沒有實際的輸入/輸出。你可以編輯你的原始問題,包括1)更多的完整程序,包括你認爲實際打印出包含大負值的行的代碼,以及2)該程序的複製+粘貼會話,包括程序打印出來的所有內容都可以輸入? –