C++ - как назначить данные из файла нескольким переменным

У меня есть.txt файл, который содержит список названия продукта, описание и количество. Например, как:

100 Plus , Sports Drink , 12 Sprite , Citrus Drink , 5 Dutch Lady, Milk, 8

Я хочу присвоить эту информацию трем переменным, string name, string description, а также int quantity

Я пытался использовать что-то вроде while(product >> name >> description >> quantity), но он работает, только если он содержит только одно слово и без запятой, но не для строки с несколькими словами.

Это мой код

#include <string>
include <fstream>
include <iostream>

using namespace std;

int main()
{
string name, description;
int quantity;
fstream product("product.txt");

string c_name[5],c_description[5];
int c_quantity[5];
int i=0;

while(product  >> name >> description >> quantity)
{

    cout<<i<<" Name= "<<name<<", Description= "<< description <<" , Quantity= " <<quantity<<"\n";
    c_name[i] = name;
    c_description[i] = description;
    c_quantity[i] = quantity;
    i++;
}

cout<<"-------------------------------------------------------------------"<<endl<<endl;

for(i=0;i<5;i++) //to display the variables
{
    cout<<i+1<<" "<<c_name[i]<<endl;
    cout<<i+1<<" "<<c_description[i]<<endl;
    cout<<i+1<<" "<<c_quantity[i]<<endl<<endl;
}

product.close();
return 0;
}

Могу ли я узнать, как я могу это сделать? И если возможно, я бы хотел использовать только несколько простых заголовочных файлов. Большое спасибо.

2 ответа

Вы можете рассмотреть getline() который позволяет использовать разделитель:

while ( getline(getline (product, name, ','), description, ',') >> quantity) 

Просто имейте в виду, что вам может понадобиться удалить пробелы в начале description а также name, как >> делал это раньше. В качестве альтернативы вы можете также добавить product.ignore(INT_MAX, '\n'); в конце вашего цикла цикла, чтобы убедиться, что последняя новая строка после количества удаляется перед выполнением следующей строки getx.

Вы не можете использовать поток >> оператор, потому что, как вы обнаружили, он останавливается на первый пробел.

Вам нужно читать по одной строке за раз

std::string line;
std::getline(product, line);

и искать запятые с std::string::find и извлеките нужные вам части std::string::substr,

Другие вопросы по тегам