使用if else语句的功能将数字从最大到最小排序

时间:2018-11-08 20:07:21

标签: c++

首先,我想说这不是家庭作业。我正在编写此代码来练习技能和学习不同的技术。这个特定代码的挑战是使用一个函数(如果只有else语句)将3个值返回给用户。我已经成功完成了我认为可以正常工作的工作。但是,我的int main()输出零而不是预期的6、12、16答案。谁能给我指出我要去哪里的地方?

#include <iostream>
using namespace std;

int sort2(int a, int b, int c){
    if (a>b && a>c){
        int value1 = a;
        if (b>c){
            int value2 = b;
            int value3 = c;
        } else {
            int value2 = c;
            int value3 = b;
        }
    }
    if (b>a && b>c){
        int value1 = b;
        if (a>c){
            int value2 = a;
            int value3 = c;
        } else {
            int value2 = c;
            int value3 = a;
        }
    }
    if (c>a && c>b){
        int value1 = c;
        if(a>b){
            int value2 = a;
            int value3 = b;
        } else {
            int value2 = b;
            int value3 = a;
        }
    }
}

int main(){
    int result = sort2(12,16,6);
    cout<<result;
}

1 个答案:

答案 0 :(得分:1)

您实际上并没有从函数中返回任何内容。编译器可以对此发出警告(并非总是如此),提高警告级别。此外,您的函数声明为返回单个整数。然后,例如:

if (b>c){
    int value2 = b;
    int value3 = c;
}

您声明两个局部于if块的变量。这些陈述没有任何作用。老实说,我能提供的最佳建议是grab a book or two。无论如何...

  

此特定代码的挑战是将3个值返回给   用户使用函数,并且仅使用else语句。

我了解您想练习if else语句和编写函数。不幸的是,仅此一项不足以完成您想要的事情,但是您可以通过返回包含3个值的结构来使代码以最小的更改工作:

struct sorted_3_values {
    int value1;
    int value2;
    int value3;
};

然后将功能更改为

sorted_3_values sort2(int a, int b, int c){
    sorted_3_values result;
    if ( ... ) {
        result.value1 = ...;
        result.value2 = ...;
        result.value3 = ...;
    }
    return result;
}

然后在main

sorted_3_values x = sort2(12,16,6);
std::cout << x.value1 << " " << x.value2 << " " << x.value3;

请注意,如果您编写这样的代码,那么您实际上并不是在使用c ++。在某些时候,您应该看一下容器(例如std::vector)和算法(std::find)。