You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中read()读取三值仅存n3,求正确实现read()与display()方法

问题分析与解决方案

首先拆解下你代码里的核心问题:

  1. 函数返回值的误区:C++里普通函数只能返回单个值,你写的return n1, n2, n3;是逗号表达式,实际只会返回最后一个值n3,这就是为什么只有n3能拿到正确输入的原因。
  2. 变量赋值的错误:n1, n2, n3 = read();同样是逗号表达式,只有n3会被赋值,n1和n2处于未初始化状态,后续调用display(你main里写的print应该是笔误)时会输出垃圾值。
  3. 未定义函数调用: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:42:29