如何在C++中实现函数间变量传递?以半径变量传递为例
解决C++中复用半径值、避免重复调用输入函数的问题
你尝试的引用传递代码的问题
你写的引用版radius函数有两个关键错误:
- 函数内部定义了和参数同名的局部变量
double radius{};,这会遮蔽外部的引用参数,导致用户输入的值根本无法传递到函数外的变量中。 - 修改后的
radius函数是带参数的void类型,但原来的circumfrence和area函数仍在调用无参的radius(),编译器找不到这个无参函数,自然会报“标识符未定义”。
正确实现方案(两种可选)
核心思路是:只获取一次半径值,再将这个值传递给需要计算周长、面积的函数,既避免重复输入,又符合函数职责分离的练习要求。
方案1:使用引用传递获取输入
适合练习引用参数的使用:
#include <iostream> const double pi{3.14}; // 用引用参数接收用户输入的半径,无需返回值 void getRadius(double& radius) { std::cout << "What is the radius of your circle?\n"; // 直接给引用参数赋值,不要定义同名局部变量 std::cin >> radius; } // 接收半径参数,计算并输出周长 void circumference(double radius) { double circ = 2 * pi * radius; std::cout << "The circumference of your circle is " << circ << std::endl; } // 接收半径参数,计算并输出面积 void area(double radius) { double ar = pi * radius * radius; std::cout << "The area of your circle is " << ar << std::endl; } int main() { double radius{}; // 一次性获取半径值 getRadius(radius); // 将同一个半径值传给两个计算函数 circumference(radius); area(radius); return 0; }
方案2:使用返回值获取输入
更简洁的实现,适合练习函数返回值的使用:
#include <iostream> const double pi{3.14}; // 获取用户输入并返回半径值 double getRadius() { std::cout << "What is the radius of your circle?\n"; double radius{}; std::cin >> radius; return radius; } void circumference(double radius) { double circ = 2 * pi * radius; std::cout << "The circumference of your circle is " << circ << std::endl; } void area(double radius) { double ar = pi * radius * radius; std::cout << "The area of your circle is " << ar << std::endl; } int main() { // 保存一次获取的半径值 double radius = getRadius(); circumference(radius); area(radius); return 0; }
内容的提问来源于stack exchange,提问作者monki_mayn
相关产品推荐
相关产品推荐

