getline считывает строку из файла бесконечно

131
01 февраля 2022, 11:20

В файле всего 3 строки:

nstructfile2
АБВ
4

Однако getline почему-то бесконечно читает файл и ничего не возвращает переменной spec[i].name даже на первой строке (которая в файле – вторая)

rd.open(fn + "2");
                            if (!rd) {
                                rd.close(); clr(red); printf("\nОшибка! Невзоможно открыть таблицу специальностей"); Sleep(3000); Cont();
                            }
                            rd >> automata;
                            if (strcmp(automata, "nstructfile2") != 0)
                            {
        rd.close(); clr(крас); printf("\nОшибка! Таблица специальностей поверждена"); clr();  Cont(); switch (uchar OMG = Cont()) { case '1':goto rewrite_file; case '2': op = '0'; }
                            }
                            else {
                                for (i = 0; !rd.eof(); i++)
                                {
                                    getline(rd, spec[i].name); rd >> spec[i].mes; n2++;
                                }
                                bar(3);
                                rd.close();

Почему так происходит и как это исправить?

Answer 1

Итак...

rd >> automata;

Считали словою В буфере - "\n".

Цикл, обрекающий на как минимум одно лишнее чтение, потому что eof срабатывает только после попытки читать за концом файла... Откуда, ну откуда, какой препод вот такому учит?!

for (i = 0; !rd.eof(); i++)
{

Считали пустую строку из буфера - остаток "\n"

     getline(rd, spec[i].name);

Пытаемся читать в, вероятно, int (конечно, зачем этих отвечающих баловать, расписывать им все? и так догадаются, что я написал до этого места!) строку, которая не число

     rd >> spec[i].mes;

Файл переходит в состояние fail (в самом деле, не царское это дело - проверять, правильно ли все прочитано!) и все дальнейшие операции с ним просто возвращают ошибку. Но, как мы уже решили - проверять ошибки - унизительно для настоящего программиста...

Как исправить?

Прочесть это и это, и, работая с файлами (и не только с ними), проверять, все ли в порядке...

READ ALSO
Перемещение камеры вслед за персонажем

Перемещение камеры вслед за персонажем

Как сделать так, чтобы камера не флипалась (поворачивалась) вместе с персонажем, но перемещалась за с ним?

91
Передать DependencyProperty UserControl всем дочерним UserControl

Передать DependencyProperty UserControl всем дочерним UserControl

Есть 3 UserControl, вложенных друг в другаДля старшего UserControl прописаны DependencyProperty - цвет элементов, которые будут задаваться в разметке и привязываться...

164
Скрипт не видит rigidbody

Скрипт не видит rigidbody

Делаю скрипт для перемещения персонажа по урокам в интернетеЗастрял на моменте прыжка

202
Один проект является поддоменом другим?

Один проект является поддоменом другим?

MVC CORE 21; У меня есть два проекта Web ( основной проект, в нём есть форум, блог

166