C++中read()读取三值仅存n3,求正确实现read()与display()方法
问题分析与解决方案
首先拆解下你代码里的核心问题:
- 函数返回值的误区:C++里普通函数只能返回单个值,你写的
return n1, n2, n3;是逗号表达式,实际只会返回最后一个值n3,这就是为什么只有n3能拿到正确输入的原因。 - 变量赋值的错误:
n1, n2, n3 = read();同样是逗号表达式,只有n3会被赋值,n1和n2处于未初始化状态,后续调用display(你main里写的print应该是笔误)时会输出垃圾值。 - 未定义函数调用:main里的
reverse函数你没实现,这个得自己补充逻辑,不过先解决读取三个值的核心问题。
下面给你几种可行的实现方式:
方式一:使用引用参数(最常用最直接)
把read函数的参数改成引用类型,这样函数内部可以直接修改main函数里的变量值,一次性完成三个值的读取:
#include<iostream> using namespace std; // 用引用参数接收要赋值的变量 void read(int& n1, int& n2, int& n3); void display(int n1, int n2, int n3); int main() { int n1, n2, n3; read(n1, n2, n3); // 直接传入变量,函数内部会修改它们的值 display(n1, n2, n3); // 如果需要reverse功能,可以自己实现,比如交换三个变量的顺序 return 0; } void read(int& n1, int& n2, int& n3) { cout << "Enter three numbers: "; cin >> n1 >> n2 >> n3; // 可以连写简化输入代码 } void display(int n1, int n2, int n3) { cout << n1 << " " << n2 << " " << n3 << endl; }
方式二:返回自定义结构体/类
把三个数值打包成一个结构体,让read函数返回这个结构体类型,这样就能一次性返回三个值:
#include<iostream> using namespace std; // 定义存储三个数的结构体 struct ThreeNumbers { int n1, n2, n3; }; ThreeNumbers read(); void display(ThreeNumbers nums); int main() { ThreeNumbers nums = read(); display(nums); return 0; } ThreeNumbers read() { ThreeNumbers nums; cout << "Enter three numbers: "; cin >> nums.n1 >> nums.n2 >> nums.n3; return nums; } void display(ThreeNumbers nums) { cout << nums.n1 << " " << nums.n2 << " " << nums.n3 << endl; }
方式三:返回std::tuple(C++11及以上版本可用)
如果不想自定义结构体,可以用标准库提供的std::tuple来打包多个值,需要包含<tuple>头文件:
#include<iostream> #include<tuple> // 必须包含这个头文件 using namespace std; tuple<int, int, int> read(); void display(int n1, int n2, int n3); int main() { // C++17及以上可用结构化绑定,直接把tuple的值解包到变量里 auto [n1, n2, n3] = read(); // 如果你用的是C++11/14,可以用tie来解包: // int n1, n2, n3; // tie(n1, n2, n3) = read(); display(n1, n2, n3); return 0; } tuple<int, int, int> read() { int n1, n2, n3; cout << "Enter three numbers: "; cin >> n1 >> n2 >> n3; return make_tuple(n1, n2, n3); } void display(int n1, int n2, int n3) { cout << n1 << " " << n2 << " " << n3 << endl; }
方式四:使用数组
如果三个值是同类型的,也可以用数组来存储,通过传入数组来完成读取:
#include<iostream> using namespace std; void read(int nums[3]); void display(int nums[3]); int main() { int nums[3]; read(nums); display(nums); return 0; } void read(int nums[3]) { cout << "Enter three numbers: "; cin >> nums[0] >> nums[1] >> nums[2]; } void display(int nums[3]) { cout << nums[0] << " " << nums[1] << " " << nums[2] << endl; }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

