我正在尝试获取输入,然后将输入值用于另一个cin
值。这些代码无法编译(预期),只是为了说明我的想法:
class StaffLogin : public ShareData {
private:
string ID;
void authorized()
{
struct staffs
{
string username;
string password;
};
staffs id700014089, id700014090;
id700014089.username="Robin";
id700014089.password="c++ is fun";
cin>>ID;
cout<<"Username: ";
cin>>"ID".username;
cout<<"Password: ";
cin>>"ID".password;
}
};
例如,我想从用户那里获取ID,所以cin>>ID
。然后使用另一个输入(cin>>"the ID from previous cin".username
)中的值,以便我可以轻松地为新用户创建新的ID,用户名和密码。请告诉我是否有方法可以做到这一点?
map<string,string> stafflist;
map<string,string>::iterator it;
没有任何结构。只是评论以防你们中的一些人需要更多细节。 ;)
答案 0 :(得分:3)
C ++不是动态语言,因此要使用从用户输入提供的名称动态创建对象,您需要使用某种键值容器,以便将任意名称与对象相关联。 C ++中的标准解决方案是std::map<Key, Value>
或std::unordered_map<Key, Value>
。
假设员工ID始终是数字,您可以这样做:
struct staffs
{
string username;
string password;
};
using StaffDirectory = std::map<unsigned long, staffs>;
StaffDirectory staff_directory;
// ...
unsigned long id;
if (std::cin >> id) // read the ID
{
// check the ID
if (!validateStaffID(id))
throw std::runtime_error("Invalid staff ID: " + to_string(id));
staffs s;
if (std::cin >> s.username >> s.password) // read username and password
{
// add the object to the map, using `id` as the key
staff_directory[id] = s;
}
}
答案 1 :(得分:2)
你所要求的是不可能的。但是,您可以这样做:
struct staffs {
string ID;
string username;
string password;
};
staffs s;
cin>>s.ID;
cout<<"Username: ";
cin>>s.username;
cout<<"Password: ";
cin>>s.password;
或者,根据您对此数据的处理方式,您还可以使用std::map<string,staffs>
在ID(第一个模板参数)和用户数据(存储在员工中)之间进行显式映射。
答案 2 :(得分:1)
#include <iostream>
#include <map>
#include <string>
using namespace std;
struct Staff
{
string username;
string password;
};
int main()
{
map<string, Staff> _map;
while (true)
{
string id;
Staff staff;
cout << "Enter id: ";
cin >> id;
bool idExists = true; //assume id exists
if (idExists)
{
cout << id << ": username: ";
cin >> staff.username;
cout << id << ": password: ";
cin >> staff.password;
_map.insert(_map.begin(), pair<string, Staff>(id, staff));
}
int choice;
cout << "\nAdd? {1 or 0}: ";
cin >> choice;
cout << endl;
if (choice != 1)
break;
}
for (auto it = _map.begin(); it != _map.end(); it++)
cout << "\n Id: " << it->first << ": Username :" << it->second.username << " , Password: " << it->second.password << endl;
return 0;
}
答案 3 :(得分:0)
你没有这样做,因为ID
不是一个结构对象。如果要使用structer变量,首先必须创建struct object。
示例:强>
staffs st; // **create staffs structer object**
cin>>st.ID;
cout<<"Username: ";
cin>>st.username;
cout<<"Password: ";
cin>>st.password;