【发布时间】:2022-01-17 19:05:57
【问题描述】:
我目前正在创建一个自定义文件结构(文件扩展名为 .ndev),以提高我在 C++ 中处理文件的技能。我可以以特定方式将值保存到文件中(见下文)
{
"username": "Nikkie",
"password": "test",
"role": "Developer",
"email": "test@gmail.com"
}
这与实际的 JSON 没有任何关系,它只是 结构类似。
我的问题是,我怎样才能用 C++ 读取其中一个变量的值,而不像下面的屏幕截图那样显示出来:
我当前编写文件的代码:
void user::RegisterUser(string username, string password, string role, string email)
{
string filename = "E:\\Coding\\C\\test\\data\\" + username + ".ndev";
ifstream CheckFile(filename);
if (CheckFile.good())
{
printf("User already exists!");
}
else {
ofstream UserDataFile(filename);
UserDataFile << "{\n\t\"username\": \"" << username << "\",\n\t\"password\": \"" << password << "\",\n\t\"role\": \"" << role << "\",\n\t\"email\": \"" << email << "\"\n}";
UserDataFile.close();
}
CheckFile.close();
}
不要在密码加密方面对我大发雷霆,我稍后会补充。我现在在 试图在我做任何其他事情之前让它读取值
我当前读取文件的代码:
void user::LoginUser(string username)
{
string filename = "E:/Coding/C/test/data/" + username + ".ndev";
ifstream UserFile(filename, ios_base::in);
if (UserFile.good())
{
string name;
string passw;
string role;
string email;
while (UserFile >> name >> passw >> role >> email)
{
cout << name << passw << endl;
cout << role << email << endl;
}
}
else
{
printf("User doesn't exist!");
}
}
我似乎无法让它正确显示值,控制台和 VS 调试版本中也没有列出任何错误。
【问题讨论】:
-
不清楚你在问什么。我假设您不知道如何使用提取运算符
>>。当您从流中提取字符串时,只会提取一个单词。前导空格被忽略。单词表示空格之间的字符。尝试使用更简单的格式:没有特殊字符,没有标签;每行只有一个字。 -
我想读取分配给变量
name、email、password和role的值。所以它只会显示Nikkie、test、Developer和test@gmail.com,而不是显示原始文本 -
只需像这样保存您的数据:
Nikkie test Developer test@gmail.com。您添加的额外信息需要解析器。 -
这不是问题所在,我正在尝试制作自定义文件结构,这意味着我不想使用正常方式但我想制作我自己的方法
-
在这种情况下,您必须学习如何编写parser。