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

时间:2014-12-12 05:04:48

标签: c++ variables getline

我循环浏览了一系列Q& A,以避开重复的代码并更轻松地管理所提出的问题。

除非你看到一个例子,否则我不能说:

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;
}

上述代码最终不会从用户的输入中产生任何内容。

我认为问题在于尝试在varNames中循环数组getline。看起来好像它认为varNames[i]本身就是一个变量名 - 我很早就认为它会在循环时打印相应的值,但显然情况并非如此。

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

我并没有完全考虑变量变量名称&#39;在这里(我知道它在C ++中是不可能的),但是我看到它的方式应该能够在循环时使用varNames数组中的值。

2 个答案:

答案 0 :(得分:3)

在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通过内存地址而不是名称来引用变量。

答案 1 :(得分:2)

这是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;
}