C++ 上界

Upperbound in C++

大家好,我是 c++ 编程的初学者,遇到了一个小问题。

此代码用于设置类型值上限。

#include "../../std_lib_facilities.h"

int change(int a, int b) {
    if (a > b) {
        int c = a; a = b; b = c;
    }
    return a, b;
}

int main() {
    int a, b, c;
    while (cout << "Type 3 numbers: \n" && cin >> a >> b >> c) {
    a,b = change(a, b);
    b,c = change(b, c);
    a,b = change(a, b);
    cout << a << ", " << b << ", " << c << "\n";
    }
    simple_error("You typed invalid number.\n");
}

在这种情况下,例如,当我键入“2 5 3”时,它 returns“2、5、5”而不是预期的“2、3、5”。我发现

b,c = change(b, c);

这行cout调试有问题,不知道是什么原因。 我该如何解决?感谢阅读。

语句 return a, b; 与您认为的不一样。您函数的签名向我们表明它 return 是一个 int,而不是一对。在 C++ 中不能有多个 return 值。你可以让你的 return 值成为一个包含两个整数的结构,但使用引用来做你想做的事情可能更容易:

void change(int & a, int & b) {
    if (a > b) {
        int c = a; a = b; b = c;
    }
}

该代码似乎在尝试使用某些 C++ 习语,但没有正确执行。我已尝试在这里为您更正它们。 (否则,David Grayson 的回答也不错,也是地道的 C++。)

要执行 解构绑定,您需要使用 tie.

要 return 值,您需要 return 一对 pair or tuple。然后做一个 return {a, b}; 到 return,ab 作为一对(或元组)。

成功的输入应该跳过 simple_error 处理程序。在这里,我通过提前 return EXIT_SUCCESS;.

完成了它
#include <cstdlib>
#include <iostream>
#include <string>
#include <tuple>
#include <utility>

using std::cin;
using std::cout;
using std::pair;
using std::string;
using std::tie;

namespace {

auto change(int a, int b) -> pair<int, int> {
    if (a > b) {
        int c = a; a = b; b = c;
    }
    return {a, b};
}

void simple_error(string const& s) {
    cout << "Error: " << s;
}

} // anon

int main() {
    int a, b, c;
    while (cout << "Type 3 numbers: \n" && cin >> a >> b >> c) {
        tie(a, b) = change(a, b);
        tie(b, c) = change(b, c);
        tie(a, b) = change(a, b);
        cout << a << ", " << b << ", " << c << "\n";
        return EXIT_SUCCESS;
    }
    simple_error("You typed invalid number.\n");
    return EXIT_FAILURE;
}