2012-03-23 51 views
-3

該程序不會運行任何人都可以幫助我理解爲什麼。這是一個硬幣翻轉游戲,應該問你想要翻轉硬幣的次數,詢問你是否打電話給頭部或尾巴,翻轉它,然後說出你猜對了還是對錯硬幣翻轉程序不會運行

# include <iostream> 
# include <ctime> 
# include <cstdlib> 
# include <string> 
using namespace std; 
int tossingtimes() 
{ 
    int tosses; 
    cout << "How many tosses will we attempt? " << endl; 
    cin >> tosses; 

    while(tosses < 1) 
    { 
     cout << "Error tosses must be greater than or equal to 1. Please submit a correct answer." << endl; 
     cin >> tosses; 
    } 
    return tosses; 
} 
void H_T() 
{ 
    char HT; 
    cout << "Will you be guessing heads or tails? ('h' or 't')"; 
    cin >> HT; 
    if (HT = 'h') 
    { 
     cout << "You chose to select Heads!"; 
    } 
    else 
    { 
     cout << "You chose to select Tails!"; 
    } 
} 
int numHT() 
{ 
    int num; 

    cout << "How many times will " << H_T() << "come up?"; 
    cin >> num; 
    return num; 
} 
int head_win() 
{ 
    int heads=0; 
    heads++; 
    return heads; 
} 
int tails_win() 
{ 
    int tails=0; 
    tails++; 
    return tails; 
} 
int main() 
{ 
    srand((unsigned) time(0));rand(); 
    int result = rand() % 2; 
    while (true) 
    { 
     int tosses_amount, HT, num; 
     tosses_amount = tossingtimes(); 
     H_T(); 
     num = numHT(); 
     cin.ignore (1000, 10); 

     if (tosses_amount == 0) 
      break; 

     for (int i = 0; i < tosses_amount; i++) 
      //random number generator 
     {  
      if (result == 0) 
      { 
       int head_win(); 
       cout << "Heads" << endl; 
      } 
      else if (result == 1) 
      { 
       int tails_win(); 
       cout << "Tails"<<endl; 
      } 

     } 
    } 
    system ("pause"); 
    return 0; 
} 
+7

1.改進格式2。更具體(發生了什麼,你期望什麼) – BlackBear 2012-03-23 16:21:15

+0

什麼是錯誤信息? 「不運行」不是錯誤消息。 – Marlon 2012-03-23 16:22:56

+0

是的,請確定格式。沒有人可以幫助你,如果他們不能讀它。 – Lander 2012-03-23 16:22:58

回答

1

void H_T()您有:

if (HT = 'h') 

來分配價值'h'HT這將始終爲true。您需要==來測試是否相等。

可惜你沒有保持跟蹤用戶選擇在代碼的任何地方什麼的...

+0

另外,OP可能需要使用'tolower'或'toupper'來減少'H'和'h'的檢查。用'tolower',OP只需要檢查'h'。 – 2012-03-23 18:03:28

0

上先看看..

int head_win() 
    { 
    int heads=0; 
    heads++; 
    return heads; 
    } 
    int tails_win() 
    { 
    int tails=0; 
    tails++; 
    return tails; 
    } 

head_win()將始終返回1和tails_win()太..

int head_win();  this doesn t mean nothing.. 

你要聲明一個變量:

int wins = head_win(); 
+0

-1,OP需要將'heads'和'tails'聲明爲'static',否則在退出函數時會消失。 – 2012-03-23 18:05:29

+0

@托馬斯馬修斯:請賜教我你寫的東西.. – 2012-03-26 08:02:39

+0

這是一個例子:'int head_win(){static int heads = 0;頭++;回頭; }'。該技術的另一個問題是程序必須重新啓動才能初始化變量。 – 2012-03-26 15:35:51

2

一個明顯的問題,我看到的是:

void H_T() { 
// ... 
} 

// ... 
cout << "How many times will " << H_T() << "come up?"; 

此試圖從H_T打印出的返回值,但由於H_T具有void返回類型,有沒有這樣的事情,編譯將失敗。

縱觀代碼,它看起來並不是唯一的一個。我認爲如果我是你,我會支持,並多多少少重新開始。一次寫一小段文件,並在下一個文件前驗證每個文件是否符合您的要求。

+0

+1。這種理念會爲我在大學裏省下很多時間。 :-) – 2012-03-23 18:01:43

0

問題不在於此代碼「無法運行」;它甚至不編譯。你的代碼有很多錯誤。

  1. 您在使用H_T()的結果;但H_T()返回void
  2. 您正試圖擺脫無限循環,比較tosses_amount0的值;但tosses_amount分配的值總是大於0tossingtimes()
  3. for循環內註釋爲// random number generator它看起來像你試圖使用功能heads_win()tails_win();實際上,你正在用這些名稱聲明新的函數。
  4. 你從來沒有真正試圖比較你得到的正面或反面的數量與用戶輸入的數字。
  5. 你只投擲一次硬幣(在main()開頭),並且只是重複使用相同的值。

還有其他幾個錯誤,但您可以從這些錯誤開始。