2015-09-19 23 views
-2

這個片段/功能:錯誤布爾無論什麼

bool overSpeedLimit(double t, double s , double v) { 
    if ((s/t) > v) return true; 
    else return false; 
} 

主這樣使用:

if(overSpeedLimit(t1, s1, v0)) cout << "\nAutomobilis virsijo greiti!"; 

所以基本上,它會檢查,如果你超過限速,如果你是給真正的,如果你打印出文字。

問題:無論輸入。如t1 = 1,s1 = 60,導致60(60/1 = 60)速度和v0爲50,bool給出錯誤。

void isNumber(double x) { 
    while (!(cin >> x)) // tikrinama ar x yra skaicius, o ne simbolis ar raide 
     { 
      cin.clear(); 
      cin.ignore(numeric_limits<streamsize>::max(),'\n'); 
      cout << "Tai nera skaicius! Prasau ivesti skaiciu: "; 
     } 
} 

bool overSpeedLimit(double t, double s , double v) { 
    if ((s/t) > v) return true; 
    else return false; 
} 

int main(int argc, char *argv[]) 
{ 
    // Variables 
    double t1 = 0, s1 = 0; // Automobilis 
    double t2 = 0, s2 = 0; // Motociklas 
    double v0;    // Leistinas greitis 

    cout << "Kiek laiko vaziavo automobilis? ";  isNumber(t1); 
    cout << "Koky atstuma vaziavo automobilis? "; isNumber(s1); 
    cout << "Kiek laiko vaziavo motociklas? ";  isNumber(t2); 
    cout << "Koky atstuma vaziavo motociklas? "; isNumber(s2); 
    cout << "Koks leistinas greitis? ";    isNumber(v0); 

    if(overSpeedLimit(t1, s1, v0)) cout << "\nAutomobilis virsijo greiti!"; 
    if(overSpeedLimit(t2, s2, v0)) cout << "\nMotociklas virsijo greiti!"; 

    // Ending 
    cout << " " << endl << endl; 
    system ("PAUSE"); 
    return EXIT_SUCCESS; 
} 
+0

什麼是速度? 't'時間? – rajuGT

+2

請提供一個[MCVE](http://stackoverflow.com/help/mcve),我們可以看到它無法正常工作。 – chris

+0

@rajuGT是的。 – xTheEc0

回答

5

您的bool「工作」就好了。你沒有通過你認爲你的價值overSpeedLimit,因爲isNumber以價值爲依據,因此實際上是無效的。

它應該採取x作爲參考,因爲它希望修改它在外部。它也應該有一個更合適的名字。

如果你只是花了一點時間並且費心檢查你傳遞給overSpeedLimit的值,你會發現這個問題很平常。

+0

你能否解釋一些更深入的內容,因爲我的英語不及你的看法,我看到問題來自哪裏,但我沒有看到它是什麼/如何解決它。 – xTheEc0

+1

@ xTheEc0 void isNumber(double&x)'。如果沒有'&','x'只是函數參數的副本,並且修改函數中的'x'對'main'中的變量沒有影響。 – melpomene