无法解决这个以数字顺序打印数字的小C ++程序的最后一个

时间:2015-10-23 08:56:47

标签: c++ console-application

我目前正在阅读“编程:使用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` - 这就是我的问题所在。第二个if语句似乎没有正常工作,我不确定原因。

3 个答案:

答案 0 :(得分:0)

这不符合您的想法:

GridView
{
    id: uePlacesGridView

    antialiasing: true

    Layout.fillWidth: true
    Layout.fillHeight: true
    Layout.margins: 8
    Layout.alignment: Qt.AlignHCenter|Qt.AlignBottom
    flow: GridView.FlowLeftToRight

    layoutDirection: Qt.LeftToRight

    clip: true

    cellWidth: 192
    cellHeight: 128

    highlightFollowsCurrentItem: true
    highlightRangeMode: GridView.StrictlyEnforceRange

    snapMode: GridView.SnapToRow

    Component.onCompleted:
    {
        model=uePlacesModel
    }

    delegate: UeButton
    {
        id: uePlacesModelDelegate

        width: uePlacesGridView.cellWidth-16
        height: uePlacesGridView.cellHeight-16

        ueText: model.ueRoleName
        ueSoundOn: false

        onUeSignalButtonClicked:
        {
            ueApplicationStatus.ueAddLoggedUser(ueUserInfoListView.model.get(ueUserInfoListView.currentIndex).ueRoleName,
                                                uePlacesGridView.model.get(uePlacesGridView.currentIndex).ueRoleId);
            ueKeypadOpacityAnimator.running=true
            ueCentralWidgetAnimator.running=true
            ueOperationsToolBarAnimator.running=true

            ueCentralWidget.visible=true
            ueCentralWidget.enabled=true

            ueOperationsToolBar.visible=true
            ueOperationsToolBar.enabled=true
        }   // onUeSignalButtonClicked:
    }   // delegate
}   // GridView

当{if (val1 < val2 && val3) 大于if时AND {val1评估为与val2不同的内容时,val3条件为真

你应该0

同样的规则适用于其他if (val1 < val2 && val1 < val3)语句。

此外,您的内部if声明也不正确。示例:检查if后,您应该检查val1 < val2 && val1 < val3。下面是您的第一个val2 < val3声明的示例:

if

最后你应该想到用户输入几次相同值的情况。

答案 1 :(得分:0)

顺便说一句,351,如果声明,他不会让你进入第三个。检查运算符优先级或完全编写运算符,例如:

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

另见:http://en.cppreference.com/w/cpp/language/operator_precedence

Imo你应该总是完全写出你的操作员,特别是如果你是这门语言的新手,它确实有帮助。 :)

答案 2 :(得分:0)

这:

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

并不代表你的想法。写这个的正确方法是:

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

额外的括号可能没有必要,但我在这种情况下的规则更安全而不是抱歉:)

什么:

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

如果布尔值(val1 < val2)(val3)为真,则返回true。如果(val3) 非零(**参见编辑部分),则val3被评估为真,否则评估为假。

更改您的代码以考虑到这一点,然后告诉我们它是否有效,我没有检查其余是否正确。

修改

编辑我的回答是说除了0之外的任何值都被评估为真。

这是对的,谢谢:)我认为让别人知道是什么误导了我可能会有用。

  1. 我在C ++文档中找不到任何引用,但它是我认为的每种语言的标准。
  2. 表达式(5 == true)返回false,但(5)被评估为true。 我想这是因为在(5 == true)中,true转换为int值1,比较是在int值之间,而不是布尔值。 (true == 5)也返回false。
  3. 这肯定是一个初学者的错误,我把它作为一个教训来进行明确的条件测试,并且永远不要相信程序来评估它们,就像我希望的那样。