[英]Use variables from other function into the main function C++
嗯,我有这个代码
#include <iostream>
#include <string.h>
using namespace std;
void function(char letter){
if(letter=='k'){
string line1,line2,line3,line4,line5;
line1="# #";
line2="# #";
line3="#### ";
line4="# #";
line5="# #";
}
}
int main(){
function('k');
cout<<line1;
}
所以,我声明了一个名为...函数的函数,参数为“char letter”。 然后我在函数中清除了 5 个新变量(字符串类型)并给了它们一个值。
我想做的是将变量“line1”的内容打印到主函数中。 在我的脑海中,我想“我将函数称为“函数”,然后它会声明变量“line1”并自行填充它。 但当然它不起作用。 尝试将变量“line1”声明到主函数中也是(显然)没用的,因为什么也不会发生。 有什么建议?
变量有一个可以被引用的范围。 在块语句(例如函数定义)中,该(潜在)范围从声明扩展到块范围的末尾(右花括号)。 main
位于声明局部变量line1
的大括号之外,因此该变量超出范围,不能被引用。
函数可以返回对象。 函数声明的这一部分是返回的对象的类型:
void function(char letter) { ^^^^
void
是一个特殊的关键字,表示该函数不返回任何内容。 我们可以将声明更改为承诺返回一个字符串。 并使用 return 语句来执行该承诺:
std::string function(char letter){
std::string line1;
// ...
return line1;
}
我们现在可以创建一个局部于main
函数的变量,并用function
返回的值初始化它:
int main() {
std::string line1 = function('k')
std::cout << line1;
}
请注意,此变量与单独作用域中具有相同名称的其他变量完全分开。
当您找到自命名变量line1,line2,line3,line4,line5
您应该使用数组或某个容器。
要“从函数中获取某些东西”,请使用返回值。
把这两点放在一起,我们得到:
#include <vector>
#include <string>
#include <iostream>
std::vector<std::string> function(char letter) {
if(letter=='k'){
return { "# #",
"# #",
"#### ",
"# #",
"# #"};
}
return {};
}
int main(){
auto x = function('k');
std::cout<< x[0];
}
当函数结束时,变量line1
不再存在。 您需要从函数中return
它才能在main
使用它。 您可以拥有一个容器,您可以将 5 个字符串插入其中,而不是拥有 5 个字符串变量。
#include <iostream>
#include <string>
#include <vector>
std::vector<std::string> function(char letter){
if(letter=='k'){
return {
"# #",
"# #",
"#### ",
"# #",
"# #"
};
}
return {};
}
int main(){
auto lines = function('k');
std::cout << lines[0]; // the first line, because numbers start at 0
}
变量line1
的作用域仅限于函数function
。 换句话说,不能从该范围之外访问line1
。
如果你想在别处拥有它的值,你需要从函数中返回它或者将它声明为全局,或者通过引用将它传递给函数function
。
检查以下代码以了解您必须执行的操作。
#include <string.h>
using namespace std;
string function(char letter){
if(letter=='k'){
string line1,line2,line3,line4,line5;
line1="# #";
line2="# #";
line3="#### ";
line4="# #";
line5="# #";
return line1;
}
}
int main(){
auto line1 = function('k');
cout<<line1;
}
另请注意:
function
是一个糟糕的函数名称line1,2,3,4,5
?你不能使用string line1;
在main()
因为它是一个局部变量。 事实上,你不能在 if 语句之外使用它,因为if(letter =='k')
和void function(char letter)
有不同的作用域。
您应该返回想要在main()
使用的字符串,而不是返回 void(在这种情况下什么都没有main()
。
像这样:
#include <string>
#include <iostream>
std::string asciiArtALetter(char letterToBox){
std::string whatToReturn{}; // the {} calls the default constructor for std::string
if(letterToBox == 'k'){
whatToReturn = "# #\n"
"# #\n"
"#### \n"
"# #\n"
"# #\n";
}
return whatToReturn;
}
int main(){
auto whatToPrint = asciiArtALetter('k');
std::cout << whatToPrint << std::endl;
return 0;
}
此外,您不应该使用using namespace std;
或出于几个原因调用函数function
。 为什么在您的情况下避免这种情况的一个例子是因为std::function
的存在。 另一个是你希望你的代码是自我记录的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.