我循环浏览了一系列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
数组中的值。
答案 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;
}