1
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
+
  • Используйте всюду для чтения только getline (числа доставайте из уже прочитанных строк) – avp Apr 23 '19 at 20:31

1 Answers1

1

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

getline(a, temp);

на

a >> temp;

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

a >> spetifications[i];

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

getline(a,spetifications[i]);

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

a.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Harry
  • 221,325