C ++:如何在使用带有ifstream对象的getline()从文件中读取一行时跳过第一个空格?

时间:2017-07-26 09:03:34

标签: c++ ifstream

我有一个名为" items.dat"的文件。以及itemID,itemPrice和itemName中的以下内容。

item0001 500.00 item1 name1 with spaces
item0002 500.00 item2 name2 with spaces
item0003 500.00 item3 name3 with spaces

我编写了以下代码来读取数据并将其存储在结构中。

#include <fstream>
#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>

using namespace std;

struct item {
    string name;
    string code;
    double price;
};

item items[10];

void initializeItem(item tmpItem[], string dataFile);

int main() {

    initializeItem(items, "items.dat");
    cout << items[0].name << endl;
    cout << items[0].name.at(1) << endl;
    return 0;
}

void initializeItem(item tmpItem[], string dataFile) {

    ifstream fileRead(dataFile);

    if (!fileRead) {
        cout << "ERROR: Could not read file " << dataFile << endl;
    }
    else {
        int i = 0;
        while (fileRead >> tmpItem[i].code) {
            fileRead >> tmpItem[i].price;
            getline(fileRead, tmpItem[i].name);
            i++;
        }
    }
}

我注意到getline()在读取项目名称和内容时读取开头的空白区域。

输出

 name1 with spaces
n

我想在开头跳过空白。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

std::ws IO操纵器可用于丢弃前导空格。

使用它的一种紧凑方式是:

getline(fileRead >> std::ws, tmpItem[i].name);

这会在ifstream传递给getline之前丢弃import ast l = ast.literal_eval(list_from_file) 中的任何空格。