我目前正在尝试编写一个程序,它接受三个整数,并将它们从最小到最大排序,然后将它们与输入的原始顺序一起输出。该程序有很多错误,例如当我输入“4 7 9”时,程序会将其排序为“4 9 9”。但是,如果我执行“65 32 11”,那么程序会将其正确排序为“11 32 65”。我只是想知道我的代码哪里出了问题,以及我如何改进它以及 future 的项目。
cout << "Please input 3 integers with a space inbetween them.\n";
int v1;
int v2;
int v3;
int smallest = 0;
int middle = 0;
int largest = 0;
cin >> v1 >> v2 >> v3;
if (v1 <= v2 && v1 <= v3) {
smallest = v1;
if (v2 <= v3) {
middle = v2;
largest = v3;
}
else
largest = v2;
middle = v3;
}
else if (v2 <= v1 && v2 <= v3) {
smallest = v2;
if (v1 <= v3) {
middle = v1;
largest = v3;
}
else
largest = v1;
middle = v3;
}
else {
smallest = v3;
if (v1 <= v2) {
middle = v1;
largest = v2;
}
else
largest = v1;
middle = v2;
}
cout << "Input values: " << v1 << ", " << v2 << ", " << v3 << '\n';
cout << "Sorted values: " << smallest << ", " << middle << ", " << largest << '\n';
keep_window_open();
}
最佳答案
我首先想到的是您的 else 语句。在 C/C++ 中,不带括号的 else
语句将在条件满足时执行下一条语句。如果没有大括号,它不会执行多个语句。这在您的代码中是有问题的,因为无论您的第二级 if
语句如何,您的 middle
值都会被覆盖。作为引用,discussion可以在 SO 的软件工程页面上查看。
替换
if (v1 <= v2 && v1 <= v3) {
smallest = v1;
if (v2 <= v3) {
middle = v2;
largest = v3;
}
else
largest = v2;
middle = v3;
}
与
if (v1 <= v2 && v1 <= v3) {
smallest = v1;
if (v2 <= v3) {
middle = v2;
largest = v3;
}
else
{
largest = v2;
middle = v3;
}
作为旁注,如果您想考虑更多的数字,您应该考虑实现基数排序。单击此处获取 Radix Sorting Algorithm Tutorial
关于c++ - 大部分使用 if 和 else 语句的程序没有正确执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54933714/