Подтвердить что ты не робот

Что я не понимаю о линиях getline +?

Это мой первый опыт использования stackoverflow. Я не смог узнать информацию, которая мне нужна в отношении getline. Я занимаюсь простым программированием для инженерных передач, поэтому код, который мы пишем, довольно прост. Все, что я пытаюсь сделать здесь, это задать определенное количество вопросов и ответов на два разных массива. Мой цикл while выглядит так (я использовал цикл for, но переключился на него, просто чтобы посмотреть, перестанет ли он прерываться):

int main ()
{
    srand((unsigned)time(0));
    string quest1[100], answ1[100];
    int size1, x = 0, num, count1, visit[100], shuffle[100];
    fstream flashcard1; 

    cout << "flashcard.cpp by NAME\n" << endl;
    cout << "This program allows user to manipulate questions and answers for studying.\n" << endl;
    cout << "\nHow many flash cards will be entered(MAX 100)? ";
    cin >> size1;
    cout << endl;

    while(x < size1)
    {
        cout << "Enter Question: ";
        getline(cin , quest1[x]);
        cout << endl;
        x = x++;

        /*
        cout << "Enter Answer: " << endl;
        getline(cin,answ1[x]);
        cout << endl;
        flashcard1.open("flashcard1.dat", ios::app);
        flashcard1 << quest1[x] << " " << answ1[x] << endl;
        flashcard1.close();
        cout << "Data Stored." << endl;
        */
    }
}

Я заметил ответ, вводящий часть, а также данные сохранения в файл только для отладки. Когда я запускаю программу, он пропускает getline для первого вопроса, отображает второй цикл "Введите вопрос", а getline работает для остальных. Поэтому, если у меня размер 1 из 5, программа заполняет только позиции 1-4. Пожалуйста помоги. Это простая программа для флеш-карт, которая будет делать то же самое, что если бы вы создавали флеш-карты для изучения и перетасовки их.

4b9b3361

Ответ 1

Причина, по которой он пропускает первую итерацию, заключается в том, что когда вы делаете

cin >> size1;

Введите номер и нажмите клавишу Enter. cin читает целое число и оставляет символ новой строки непрочитанным в буфере, так что, когда вы вызываете getline, он как будто вы сразу же нажимаете клавишу ввода, а getline ничего не читает (потому что он останавливается перед чтением символа новой строки), отбрасывает новую строку и помещает пустую строку в quest1[0]. И вот почему остальные getline работают "правильно".

Добавьте cin.ignore('\n') над вашим циклом, чтобы избавиться от затяжного '\n', и это должно заставить его работать, запрещая другие ошибки в вашем коде.

И не забудьте изменить x = x++ только на x++, чтобы избежать UB.