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;
}
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 在C/C++中将变量名定义为__00000001有什么好处吗
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- C++ - 声明中变量名后面的括号
- 如何使替换 c 函数的变量名成为错误?
- 使用语法公开派生类中的基类别名模板和变量模板?
- 是否可以创建没有变量名的变量
- fstream库,试图创建一个变量名为(c++)的文件
- 一个数组C++中的消息和变量名
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 无法初始化 libsupc++ 库中类型为 'std::terminate_handler' 的变量(又名 'void (*)()')
- 使用C 中的Cython CDEF公共变量:变量永远不会初始化
- 字符串从变量(&变量)地址的长度 - 嵌入式C
- C++ 结构中的可选变量(变量结构)
- 如何向调试器隐藏变量/函数名
- 未初始化的本地变量(变量是类中的对象)-MYSQL
- 如何转换为变量类名
- C共享对象,带有c++归档,静态变量/变量,和开放
- 变量>>变量在 c++ 中的含义是什么?