Помочь разобраться с потоками ввода из файла

221
02 мая 2018, 05:18

Задача такая, считать из файла название компании, далее пробел считать это в доход компании. После все закидывается в вектор структур, считывать до конца файла. Вот код который написал.

    string line;
//getline(fin, line);
while () 
{
    City temp;

    for (int i = 0; i < 2; i++) 
    {
        temp.Name = line;
        if (i > 0) {
            //line = NULL;
            fin >> line;
            temp.money = stoull(line);

        }
    }
    arr.push_back(temp);

}

Это пример файла.

BerkshireHathaway 223604000
UnitedHealthGroup 184840000
CVSHealth 177526000
GeneralMotors 166380000
AT&T  163786000
WalgreensBootsAlliance 117351000
FordMotor 151800000
AmerisourceBergen 146850000
VerizonCommunications 125980000
CardinalHealth 121546000
Costco  118719000
Kroger 115337000
Walmart 485873000
Amazon 135987000
Chevron 107567000
Apple 215639000
ExxonMobil 205004000
McKesson  192487000
FannieMae 107162000
GeneralElectric 126661000
Answer 1

Вы при i==0 вообще ничего не читаете...

Я смотрю, все компании у вас без пробелов в имени - тогда вообще все просто:

City temp;
while (fin >> temp.Name >> temp.money)
    arr.push_back(temp);
Answer 2

Чтобы избавиться от временных переменных и лишных присваиваний, можно один раз перегрузить оператор потока ввода и сразу из потока заполнить контейнер обьектами класса:

std::istream& operator >>(std::istream& is, City& c)
{
    is >> c.name >> c.monay;
    return is;
}
#include <algorithm>
int main() {
std::vector<City> v;
std::copy(std::istream_iterator<City>(fin), std::istream_iterator<City>(),
          std::back_inserter(v));
...
READ ALSO
Почему изменяется переменная k с 5 на 7 при работе с указателем?

Почему изменяется переменная k с 5 на 7 при работе с указателем?

При добавлении элемента в список, изменяется переменная k, причём иногда программа отрабатывает правильно k всегда равно пятиНо по каким-то...

206
Передача значений из одной функции в другую и сравнение адресов элементов стека

Передача значений из одной функции в другую и сравнение адресов элементов стека

Нужно, чтобы вычисленные в функции Min_Max значения адресов min и max сохранялись и передавались в функцию CountА функция Count должна считать элементы...

202
Можно ли использовать класс string вместе со scanf?

Можно ли использовать класс string вместе со scanf?

Для вывода объекта класса string с помощью printf можно воспользоваться методом c_str()

232