C ++:如何在将getline()与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

我想在一开始就跳过空白。我怎样才能做到这一点?

高炉

std::wsIO操作器可以用来丢弃前导空格。

一种紧凑的使用方式是:

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

这会丢弃ifstream传递给之前的所有空格getline

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章