[英]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.