使用 fstream 将文件中的一行读入不同的变量
Reading a line from a file into different variables using fstream
我想知道是否有任何方法可以在尝试为 name 赋值时不忽略空格。
我想在 while 循环中保留此条件结构*,但获取 ClientFile >> 类似于 getline 而不是 cin。
*我知道我可以使用 substring 和 find,但不是这个主意。
文本文件中的行示例:
1 ; Iron Man ; 10.70
问题:
程序没有进入循环,因为 name 仅被指定为 Iron。
using namespace std;
int main()
{
ifstream ClientsFile("clients.txt");
int id;
string name;
double money;
char sep1;
char sep2;
while (ClientsFile >> id >> sep1 >> name >> sep2 >> money)
{
cout << "id: " << id << endl << "name: " << name << endl << "money: " << money << endl << endl;
}
return 0;
}
谢谢。
输入运算符>>
在白色-space上分开。相反,您可能想使用 std::getline
来读取分号分隔的字段。
类似
std::string id_string, money_string;
while (std::getline(ClientsFile, id_string, ';') &&
std::getline(ClientsFile, name, ';') &&
std::getline(ClientsFile, money_string))
{
id = std::stoi(id_string);
money = std::stod(money_string);
...
}
我想知道是否有任何方法可以在尝试为 name 赋值时不忽略空格。
我想在 while 循环中保留此条件结构*,但获取 ClientFile >> 类似于 getline 而不是 cin。
*我知道我可以使用 substring 和 find,但不是这个主意。
文本文件中的行示例:
1 ; Iron Man ; 10.70
问题: 程序没有进入循环,因为 name 仅被指定为 Iron。
using namespace std;
int main()
{
ifstream ClientsFile("clients.txt");
int id;
string name;
double money;
char sep1;
char sep2;
while (ClientsFile >> id >> sep1 >> name >> sep2 >> money)
{
cout << "id: " << id << endl << "name: " << name << endl << "money: " << money << endl << endl;
}
return 0;
}
谢谢。
输入运算符>>
在白色-space上分开。相反,您可能想使用 std::getline
来读取分号分隔的字段。
类似
std::string id_string, money_string;
while (std::getline(ClientsFile, id_string, ';') &&
std::getline(ClientsFile, name, ';') &&
std::getline(ClientsFile, money_string))
{
id = std::stoi(id_string);
money = std::stod(money_string);
...
}