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,a
和 b
作为一对(或元组)。
成功的输入应该跳过 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;
}
大家好,我是 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,a
和 b
作为一对(或元组)。
成功的输入应该跳过 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;
}