c++ - 大部分使用 if 和 else 语句的程序没有正确执行

标签 c++

我目前正在尝试编写一个程序,它接受三个整数,并将它们从最小到最大排序,然后将它们与输入的原始顺序一起输出。该程序有很多错误,例如当我输入“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/

相关文章:

c++ - 为什么 clang 仍然需要 libgcc.a 来编译我的代码?

c++ - 将大量二进制数据加载到 RAM 中

c++ - 找不到过程入口点

c++ - 单词大写的最快方法

c++ - visual c++ 的 pthreads-w32 中的 new 和 delete 运算符是线程安全的吗?

c++ - 编译器优化如何影响代码逻辑?

c++ - 尝试使用指向结构 vector 的指针访问结构类型时出错

c++ - 如何从核心文件中获取有关崩溃的信息?

c++ - 模棱两可的变种和提升精神x3

c++ - 使用 openmp 并行 for_each