这是我的文本文件:


12345 shoe 5 0
34534 foot 72 1
34562 race 10 0
34672 chicken 24 150
88 pop 65 0



我需要拿这个文件并逐行进行,将第一个数字指定为标识符itemNum,将第二个单词指定为itemName,将第三个数字指定为itemPrice,最后一个数字指定为itemAdjusmentValue。我将需要使用最后两个数字itemPriceitemAdjusmentValue进行算术运算。

到目前为止的代码:

using namespace std;

// making a struct to store each value of the cuadre

struct Cuadre
{

    int itemNum;
    string itemName;
    int itemPrice;
    int itemAdjusment;

};

int main (){

    ifstream infile("sheet_1.txt");
    string checkLine;

    if (infile.is_open()){

        while ( infile.good()){

            getline (infile, checkLine);
            cout << checkLine << endl;
        }
    }
    else
        cout << "error with name of file" << endl;


    vector<Cuadre> procedures;

    Cuadre line;

    while(Cuadre >> line.itemNum >> line.itemName >> line.itemPrice >> line.itemAdjusment){
        procedures.push_back(line);
    }


此代码在最后一个while语句中生成错误


  “ >>”标记之前的预期主要表达式


我真的找不到关于如何执行此操作的特定教程,而且我看了很多。

最佳答案

从您发布的代码(参考>> istream operators)看来,您想要将从文件中读取的字符串数据的内容流式传输到结构的成员中。

由于字符串不提供流接口,因此无法直接从std::string流(例如:checkLine >> x >> y >> z)。

为此,您需要使用流,例如std::stringstream
您可以用字符串checkLine填充a,然后从中将其流式传输到数据成员中

std::stringstream ss(checkLine);
ss >> line.itemNum >> line.itemName >> line.itemPrice >> line.itemAdjusment;


示例代码:

#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>

using namespace std;

// making a struct to store each value of the cuadre

struct Cuadre
{

    int itemNum;
    string itemName;
    int itemPrice;
    int itemAdjusment;

};

int main (){

    ifstream infile("sheet_1.txt");
    string checkLine;

    vector<Cuadre> procedures;

    if (infile.is_open()){

        while ( infile.good()){

            getline (infile, checkLine);
            cout << checkLine << endl;

            Cuadre line;
            std::stringstream ss(checkLine);
            ss >> line.itemNum >> line.itemName >> line.itemPrice >> line.itemAdjusment;
            procedures.push_back(line);
        }
    }
    else
        cout << "error with name of file" << endl;

    return 0;
}

10-08 00:51