¿Qué no estoy entendiendo sobre getline + strings?

Esta es la primera vez que uso stackoverflow. No he podido encontrar la información que necesito con respecto a getline. Estoy en una clase de progtwigción simple para las transferencias de ingeniería, por lo que el código que escribimos es bastante simple. Todo lo que estoy tratando de hacer aquí es poner un número definido por el usuario de preguntas y respuestas en dos matrices diferentes. Mi ciclo while se ve así (estaba usando un ciclo for, pero cambié a while solo para ver si dejaba de romperse):

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 <> 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; */ } } 

Anoté la respuesta ingresando la parte y los datos guardados en el archivo solo para la depuración. Cuando ejecuto el progtwig, se salta la línea de obtención para la primera pregunta, muestra el segundo ciclo de “Introducir pregunta” y la línea de obtención funciona para el rest de ellos. Entonces, si tengo un tamaño 1 de 5, el progtwig solo llena las posiciones de la matriz 1-4. Por favor ayuda. Este es un sencillo progtwig de tarjeta flash que hará lo mismo que si crearas tarjetas de memoria para estudiarlas y mezclarlas.

La razón por la que parece omitir la primera iteración es porque cuando lo haces

 cin >> size1; 

Ingrese un número y presione la tecla Intro. cin lee el entero y deja el carácter de nueva línea sin leer en el búfer , por lo que cuando llamas a getline , es como si presionas inmediatamente la tecla Intro, y getline no lee nada (porque se detiene antes de leer el carácter de nueva línea), descarta la nueva línea, y pone la cadena vacía en quest1[0] . Y es por eso que el rest de la línea getline funciona “correctamente”.

Agregue cin.ignore('\n') arriba de su ciclo para deshacerse de la persistente '\n' , y eso debería hacer que funcione, salvo otros errores en su código.

Y no olvides cambiar x = x++ por solo x++ para evitar UB.