我目前正在阅读“编程:使用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语句似乎没有正常工作,我不确定原因。
答案 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)
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之外的任何值都被评估为真。
这是对的,谢谢:)我认为让别人知道是什么误导了我可能会有用。
这肯定是一个初学者的错误,我把它作为一个教训来进行明确的条件测试,并且永远不要相信程序来评估它们,就像我希望的那样。