【发布时间】:2016-11-29 13:10:57
【问题描述】:
在这个小程序中,我尝试按降序排列 3 个数字。但似乎有“// 3 2 1 - 不起作用”作为注释的行没有按预期工作。看来我的逻辑是正确的。
我的意见: 4、 554 和 454545
输出:(这不是我想要的) 554、454545 和 4
如果整数 numbThree 的值大于 numbOne 并且如果 numbOne NOT 大于 numbTwo (NOT == else) 它应该输出 numbThree、numbTwo 和numbOne按这个顺序,为什么不行?
#include <iostream>
int main() {
int numbOne = 0, numbTwo = 0, numbThree = 0;
std::cin >> numbOne >> numbTwo >> numbThree;
if (numbOne > numbTwo) {
if (numbTwo > numbThree) {
std::cout << numbOne << " " << numbTwo << " " << numbThree << std::endl; // 1 2 3
}
else {
std::cout << numbOne << " " << numbThree << " " << numbTwo<< std::endl; // 1 3 2
}
}
else if (numbTwo > numbOne) {
if (numbOne > numbThree) {
std::cout << numbTwo << " " << numbOne << " " << numbThree << std::endl; // 2 1 3 - works
}
else {
std::cout << numbTwo << " " << numbThree << " " << numbOne << std::endl; // 2 3 1
}
}
else if (numbThree > numbOne) {
if (numbOne > numbTwo) {
std::cout << numbThree << " " << numbOne << " " << numbTwo << std::endl; // 3 1 2
}
else {
std::cout << numbThree << " " << numbTwo << " " << numbOne << std::endl; // 3 2 1 - doesn't work
}
}
std::cin.get();
std::cin.ignore();
return 0;
}
提前感谢您帮助我。
【问题讨论】:
-
听起来你可能需要学习如何使用调试器来单步调试你的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。延伸阅读:How to debug small programs
-
错在代码应该使用一个小数组和
std::sort,而不是这种意大利面条式的代码。 -
这种情况会被第一个
else if捕获,因为numbTwo > numbOne是真的。 -
当你可能达到第三个条件时仔细观察:
if (numbOne > numbTwo) { ... } else if (numbTwo > numbOne) { ...} else if (numbThree > numbOne){只有前两个条件为假,即前两个数字相等时,你才能达到它! -
感谢 Gavin 和 Gerhardh 指出我的逻辑中缺少的东西,真的很有帮助。谢谢。
标签: c++ if-statement logic