Проблема при использовании getline при считывании с файла [дубликат]

230
09 февраля 2020, 14:10
На этот вопрос уже даны ответы здесь:
Сброс буфера ввода (“читает лишнюю [пустую] строку”) (2 ответа)
Закрыт 10 месяцев назад.
void read_character(ifstream &a)
{
    char t;
    a >> t;
    if (t == '+')
    {
        string temp;
        getline(a, temp);
        character_name = temp;
        a >> number;
        spetifications = new string[number];
        spetifications_value = new int[number];
        for (int i = 0; i < number; i++)
        {
            a >> spetifications[i];
        }
        for (int i = 0; i < number; i++)
        {
            a >> spetifications_value[i];
        }
        a >> t;
        if (t != '+') { throw; }
    }
    else
    {
    throw;
    }
}
int main()
{
ifstream k("output.txt");
b.read_character(k);
}

Суть проблемы в следующем, я хочу считать объект b с текстового файла, для удобства блок этого объекта выделен плюсами. Исключений не вызывает, даже последний плюс считывается полноценно, но все, что после getline() считывается неправильно с левыми значениями, да и другие объекты впоследствии выбрасывают исключения при считывании. Сам текстовый файл:

+
void
2
first_spetification
second_spetification
45
100
+
Answer 1

Если у вас все строковые значения из одного слова - замените

getline(a, temp);

на

a >> temp;

и живите спокойно. Если нет - то

a >> spetifications[i];

замените тоже на

getline(a,spetifications[i]);

но перед каждым getline, включая первый, сбрасывайте буфер потока

a.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
READ ALSO
Преобразовать массив по формуле

Преобразовать массив по формуле

Нужно преобразовать массив по формуле b(i) = (a(i) - a(i-1))/i В теории, мой код должен работаь, но что то не так

261
Последовательность нулей и единиц

Последовательность нулей и единиц

В двухбайтной ячейке памяти записана последовательность нулей и единицС помощью битовых операций переставьте биты так чтобы сначала шли...

217
Динамические массивы в stl

Динамические массивы в stl

Хочу создать квадратную матрицу с помощью stl и чтобы пользователь сам заполнял массивПока код такой:

241