2017-03-07 44 views
-1

我目前的項目使用一個do-while循環和一個單獨的值生成函數來調用一個程序。該程序要求輸入的數量不確定,直到輸入的最後兩個數字之間的差值大於12爲止。代碼有效,但只有當它看起來很明顯。有時它會認識到bool已經被立即滿足並終止了,有時候我可以輸入15個以上的數字直到它結束,如果它甚至結束在第一位。如果可能的話,我想保持我的代碼與我目前的代碼類似。我知道我需要一個先決條件,因爲第一個輸入沒有什麼可比較的,我現在想弄明白這一點。C++爲什麼只要滿足布爾條件,我的do-while循環就無法結束?

這是到目前爲止我的代碼:

bool TwelveApart(int x, int y); 

int main() 
{ 
    int num1, num2; 
    cout << "Enter some integers: " << endl; 

    do 
    { 
     cin >> num1 >> num2; 
     TwelveApart(num1, num2); 
    } while (TwelveApart(num1, num2) == false); 
    cout << "The difference between " << num1 << " and " << num2 << " is greater than or equal to 12." << endl; 

    return 0; 
} 
bool TwelveApart(int x, int y) 
{ 
    if (abs(x - y >= 12)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

您從'x'中減去'y> = 12'。是的,你的閱讀是正確的,我相信它對你沒有任何意義......呃,就是這一點。 ;)但是我相信你現在有足夠的信息來解決你的問題。 –

+0

不能相信我錯過了。 – JigglyBlubber

回答

5

有條件在

if (abs(x - y >= 12)) 

沒有設置正確。它需要:

if (abs(x - y) >= 12) 

FWIW,可以簡化功能:

bool TwelveApart(int x, int y) 
{ 
    return (abs(x - y) >= 12); 
} 

此外,你必須在do-while環路TwelveApart一個冗餘呼叫。這個電話沒有任何用處。循環可以是:

do 
{ 
    cin >> num1 >> num2; 
} while (TwelveApart(num1, num2) == false); 
+0

謝謝。它還不完全完美,即使滿足條件,我仍然需要輸入更多的號碼,但它正在工作,我現在正處在正確的軌道上。 – JigglyBlubber

+0

@JigglyBlubber,這聽起來不對。在符合'do {..} while();'語句的條件之後,您不必輸入任何更多數字。 –

相關問題