繁体   English   中英

C ++-在getline中使用变量作为变量名

[英]C++ - Using a variable as the variable name in getline

我正在遍历一系列问答,以躲避重复的代码并更轻松地管理所提出的问题。

在您看到一个示例之前,我只能说很多:

string nameOfUser, nameOfCourse; // define

string varNames [] = { nameOfUser, nameOfCourse };
string varDesc [] = { "Please enter your name:", "Please enter the course name:" };

for (int i = 0; i < 2; i++)
{
  cout << varDesc[i] << endl;
  getline( cin, varNames[i] );
  cout << endl;
}

上面的代码最终不会从用户的输入中产生任何结果。

我相信问题在于尝试在getline循环数组varNames 似乎好像认为varNames[i]本身就是变量名一样-我早先假设它在循环时会打印相应的值,但是显然并非如此。

简而言之,是否可以简单地使用变量的值作为变量的名称,或者就getline而言这是不可能的吗?

我在这里并没有完全考虑“变量名”(我知道这在C ++中是不可能的),但是从我的角度来看,它应该能够在循环时使用varNames数组中的值。

在C ++中,变量名仅存在于您的源代码中。 一旦程序运行,它们就会消失。 因此,不可能使用存储的变量名来访问C ++中的实际变量。

但是,您可以将指针放入这样的数组中以获得类似的行为:

string nameOfUser, nameOfCourse;

string * p[2] = {&nameOfUser, &nameOfCourse};

for (int i=0; i<2; i++) {

    cout << varDesc[i] << endl;
    getline(cin, *(p[i]));
    cout << endl;

}

在这里, p通过变量的内存地址而不是变量名来引用变量。

这是C ++映射数据结构的理想用例,大致如下:

std::map<std::string,std::string> myMap;

第一个字符串将是“变量名”,第二个字符串是用户输入的值。

请参阅以下程序以了解执行此操作的方法:

#include <iostream>
#include <map>
#include <string>

int main (void)
{
    std::map<std::string,std::string> vars;
    std::string entry, varNames[] = {"name of user", "name of course" };
    for (int i = 0; i < sizeof(varNames) / sizeof(varNames[0]); i++) {
        std::cout << "Enter " << varNames[i] << ": ";
        std::getline( std::cin, entry );
        vars[varNames[i]] = entry;
    }

    std::cout << "Name  : " << vars[varNames[0]] << '\n';
    std::cout << "Course: " << vars[varNames[1]] << '\n';

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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