簡體   English   中英

無法計算出該小C ++程序的最后一個程序,該程序以數字順序打印數字

[英]Cannot work out the last of this little C++ program that prints numbers in numerical sequence

我目前正在經歷“編程:使用C ++的原理和實踐”,我還不能完全完成一項特定的練習。 在該程序中,用戶將輸入三個隨機數,然后程序將按數字順序返回這些數字。 如果第一個和第二個數字輸入的最低,那么它們將正確返回,但是第三個和第二個數字不是,並且我不確定為什么。 這是代碼:

int main()
{
    string barn;



    int val1 = 0, val2 = 0, val3 = 0;

    cout << "Enter the first number: ";
    cin >> val1;

    cout << "Enter the second number: ";
    cin >> val2;

    cout << "Enter the third number: ";
    cin >> val3;


    if (val1 < val2 && val3)
    {
        cout << val1 << " "; 

        if (val1 < val2)
        {
            cout << val2 << " ";
            cout << val3 << " ";
        }

        else
        {
            cout << val3 << " ";
            cout << val2 << " ";
        }
    }

    else if (val2 < val1 && val3)
    {
        cout << val2 << " ";

        if (val2 < val1)
        {
            cout << val1 << " ";
            cout << val3 << " ";
        }

        else
        {
            cout << val3 << " ";
            cout << val1 << " ";
        }
    }

    else if(val3 < val1 && val2)
    {
        cout << val3 << " ";

        if (val3 < val1)
        {
            cout << val1 << " ";
            cout << val2 << " ";
        }

        else
        {
            cout << val2 << " ";
            cout << val1 << " ";
        }
    }

    cin >> barn;
}

1 3 5打印:1 3 5. 3 1 5打印:1 3 5. 3 5 1打印:3 5 1`-這是我的問題所在。 第二個else if語句似乎無法正常工作,我不確定為什么。

這不符合您的想法:

if (val1 < val2 && val3)

當( val1大於val2 )AND( val3計算結果不同於0 )時,您的if條件為true

你應該做if (val1 < val2 && val1 < val3)

其他if語句也適用相同的規則。

另外,您的內部if語句不正確。 示例:一旦檢查val1 < val2 && val1 < val3 ,則應檢查val2 < val3 下面是您的第一個if語句的示例:

if (val1 < val2 && val1 < val3)
{
    cout << val1 << " "; 

    if (val2 < val3)
    {
        cout << val2 << " ";
        cout << val3 << " ";
    }

    else
    {
        cout << val3 << " ";
        cout << val2 << " ";
    }
}

最后,您應該考慮用戶多次輸入相同值的情況。

順便說一句,351不會使您進入if語句的第三位。 檢查您的操作員優先級或完全寫出您的操作員,例如:

else if ((val3 < val1) && (val3 < val2)) 

另請參閱: http : //en.cppreference.com/w/cpp/language/operator_precedence

Imo,您應該始終完全寫出您的運算符,特別是如果您是該語言的新手,那確實有幫助。 :)

這個:

if(val1 < val2 && val3){...}

並不意味着您認為的那樣。 正確的寫法是:

if((val1 < val2) && (val1 < val3)){...}

多余的括號可能不是必需的,但是在這種情況下,我的規則比后悔更好:)

什么:

if(val1 < val2 && val3){...}

的確是如果布爾值(val1 < val2)(val3)為true,則返回true。 如果val3 不為零 (** cf EDIT節),則(val3)的評估結果為true,否則評估為false。

更改您的代碼以考慮到這一點,然后告訴我們是否可行,我沒有檢查其余的是否正確。

編輯

編輯我的答案是說除0以外的任何值都被評估為true。

沒錯,謝謝:)我認為了解別人的誤解對其他人可能有用。

  1. 我在C ++文檔中找不到對此的任何引用,但這很好,這是我所假設的每種語言的規范。
  2. 表達式(5 == true)返回false,但是將(5)評估為true。 我想這是因為在(5 == true)中,將true轉換為int值1,並且比較是在int值之間,而不是布爾值之間。 (true == 5)也返回false。

當然,這肯定是一個初學者的錯誤,我將其作為進行顯式條件測試的一課,而從不信任該程序來按我的意願對其進行評估。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM