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

У меня есть файл .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

Решение

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

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

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

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

0

Другие решения

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

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

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

0

По вопросам рекламы [email protected]