2013-10-30 61 views
-1

我在運行我的功能時遇到問題。該程序應該查看一組3個數字是否有效,只有在200到800之間。即使認爲諸如-5的值是無效的,結果仍然認爲它是有效的。有人能幫我找出問題嗎?功能錯誤消息

回答

2

由於您未初始化bool變量,因此您正在運行未定義行爲。

bool ansa, ansb, ansc, overall; 

在C和C++中,如果表達式計算爲0,則認爲表達式爲「假」,否則認爲是真。

if (!0) 
    std::cout << "!0 is true" << std::endl; 
if (3) 
    std::cout << "3 is true" << std::endl; 
if (255) 
    std::cout << "255 is true" << std::endl; 

正在發生的事情是,該方案是爲ansaansbansc在棧上分配空間。如果這些位置在前面的函數調用中碰巧已被您的程序使用過,則它們可能具有非零值,導致它們評估爲「真」。

您需要設置這些默認是假的:

bool ansa = false, ansb = false, ansc = false, overall = false; 

,或者你需要給他們分配的「假」值,當你發現自己的條件不具備的(即「別人的情況下,您測試):

bool isitavalidgroup (int a, int b, int c) 
{ 
    bool ansa, ansb, ansc, overall; 

    if ((a <= 800) && (a >= 200)){ 
     ansa = true; 
    } 
    else { 
     cout << a << " is invalid" << endl; 
     ansa = false; 
    } 
    if ((b <= 800) && (b >= 200)) { 
     ansb = true; 
    } 
    else { 
     cout << b << " is invalid" << endl; 
     ansb = false; 
    } 
    if ((c <= 800) && (c >= 200)) { 
     ansc = true; 
    } 
    else { 
     cout << c << " is invalid" << endl; 
     ansc = false; 
    } 
    if (ansa && ansb && ansc == true){ 
     overall = true; 
    } 
    else { 
     overall = false; 
    } 
    return overall; 
} 

此外,您可以重寫代碼以使用「短路」邏輯 - 也就是說,該組是有效的所有三個變量必須是有效的。如果有人無效,您立即知道該團隊不再有效。所以當你發現你的第一個錯誤情況而不是繼續測試它們時,請返回false。

if (a && b && c) 

的「& &」的意思是「也」,所以如果a是假的,條件不可能是真實的,所以沒有理由去和計算出如果bc也是如此。

bool isItAValidGroup(int a, int b, int c) 
{ 
    if (a < 200 || a > 800) { 
     cout << a << " is invalid" << endl; 
     return false; 
    } 
    if (b < 200 || b > 800) { 
     cout << b << " is invalid" << endl; 
     return false; 
    } 
    if (c < 200 || c > 800) { 
     cout << c << " is invalid" << endl; 
     return false; 
    } 

    // everything passed. 
    return true; 
} 
1

您尚未初始化ansa,ansb或ansc。您在條件語句中明確地將它們設置爲true,但是您從不將它們設置爲false。因此,它們的值沒有被定義,只要它們沒有被初始化爲零,它們就被認爲是真的。