首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:如何在使用带有ifstream对象的getline()从文件中读取一行时跳过第一个空格?

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

Stack Overflow用户
提问于 2017-07-26 17:03:34
回答 1查看 3.9K关注 0票数 2

我有一个名为"items.dat“的文件,其内容依次为itemID、itemPrice和itemName。

代码语言:javascript
复制
item0001 500.00 item1 name1 with spaces
item0002 500.00 item2 name2 with spaces
item0003 500.00 item3 name3 with spaces

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

代码语言:javascript
复制
#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()在读取项目名称和内容的同时读取开头的空格。

输出

代码语言:javascript
复制
 name1 with spaces
n

我想跳过开头的空格。我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-26 17:13:23

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

使用它的一种简洁方法是:

代码语言:javascript
复制
getline(fileRead >> std::ws, tmpItem[i].name);

这将在传递给getline之前丢弃ifstream中的任何空格。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45322228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档