使用fstream将文件中的行读入不同的变量

时间:2016-05-08 23:51:38

标签: c++ ifstream cin getline

我想知道在尝试为名称赋值时是否有任何方法不忽略空格。

我想在while循环中保留此条件结构*但是获取ClientFile>>比如getline而不是cin。

*我知道我可以使用子串并找到,这不是主意。

来自文本文件的行示例:

  

1;钢铁侠 ; 10.70

问题: 程序不会进入循环,因为名称仅被指定为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;
}

感谢。

1 个答案:

答案 0 :(得分:3)

输入运算符>>在空白处分隔。相反,您可能希望使用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);
    ...
}