2017-08-03 130 views
-3

我是一個新手(開始學習編碼就像2周前),我真的很感謝一些幫助,以解釋爲什麼我的代碼不工作。 我寫了一個簡單的代碼來計算概率。這不是非常重要的部分。該代碼需要一些用戶輸入,所以爲了使它有點簡單,我寫了兩個if語句來處理各種錯誤的輸入(錯誤的數據類型,數字太高,數字太低)以拋出錯誤消息並終止程序。如果輸入正確(意味着if語句的條件都不成立),它應該調用函數diceTwo(des)。 但是,如果我輸入數字8 - 哪一個應該是好的 - 出於某種原因我無法弄清楚 - 如果語句觸發數字太高/低,所以無論輸入什麼數字,該函數都不會被調用。C++如果語句行爲不正確

cin >> des; 

if (cin.fail()) 
{ 
    cin.clear(); 
    cin.ignore(100, '\n'); 
    cout << "Invalid input! Use only whole positive numbers!" << endl; 
    cout << "Try again." << endl; 

    return -1; 
} 

if (des> 12 || des< 1); 
{ 
    cout << "Invalid input!" << endl; 
    cout << "Remember the only possible values are from 2 to 12!" << endl; 
    cout << "Try again." << endl; 

    return -1; 
} 

diceTwo(des); 

cout << "The probability of this roll is " << x << "%" << endl; 

這是造成麻煩的部分。我已經嘗試將有問題的if語句拆分爲兩個(一個用於< 1,一個用於> 12),或者添加一個新的if語句以用於調用該函數,但它們都不起作用。我曾經和if語句一起提供了幾次前用戶輸入的萬無一失,總是運行良好,所以我真的無法找到這次發生了什麼問題。任何人都可以告訴我如何修復它?

+1

你知道,'「n''是不一樣的東西'」 \ n'',對不對? –

+0

我們需要足夠的代碼來重現問題。我們甚至不能說「des」是一個「int」,「float」,「std :: string」還是什麼。 –

+0

@SamVarshavchik是的,當然,對不起,我的壞,我正在刪除cout句子的一些部分(包括\ n)以簡化代碼,因爲我把它放在這裏,並可能錯誤地刪除了'\'。在我原來的代碼中是'\ n'。我會在這裏編輯它。 – InsaneNewbie

回答

3

你在if語句之後有一個分號。仔細一看:

if (des> 12 || des< 1); //<----- semi colon 
{ 
    cout << "Invalid input!" << endl; 
    cout << "Remember the only possible values are from 2 to 12!" << endl; 
    cout << "Try again." << endl; 

    return -1; 
} 

的分號結束if語句,讓你的程序只是繼續到下一行,這恰好是你的無效輸入線。刪除分號,你是金:)

+0

而你的編譯器應該給你一個警告。如果沒有,你要麼濫用它,要麼是一堆垃圾。 –

+0

是真的!你必須小心,有時你的編譯器不是全知的 – travisjayday

+0

哦,上帝,謝謝你!我知道這會是我錯過的小而愚蠢的事情,但不是這個小小的和愚蠢的:D再次感謝你。而@DavidSchwartz不,我的編譯器並沒有警告我。我使用默認的GNU GCC編譯器的Code :: Blocks。它很糟糕嗎?有什麼更好的,你可以推薦我嗎? – InsaneNewbie

2

誤加了;在如果

if (des> 12 || des< 1);