繁体   English   中英

使用其他函数的变量到主函数 C++

[英]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;    
}

另请注意:

  1. function是一个糟糕的函数名称
  2. 如果你对它们什么都不做,你为什么要创建许多变量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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM