Was verstehe ich nicht über getline + strings?

Dies ist das erste Mal, dass ich stackoverflow verwende. Ich konnte nicht die Informationen finden, die ich bezüglich getline benötige. Ich bin in einer einfachen Programmierklasse für technische Übertragungen, also ist der Code, den wir schreiben, ziemlich einfach. Alles, was ich hier versuche, ist eine benutzerdefinierte Anzahl von Fragen und Antworten in zwei verschiedene Arrays. Meine while-Schleife sieht folgendermaßen aus (Ich habe eine for-Schleife verwendet, bin aber zu der Zeit gewechselt, um zu sehen, ob sie aufhört zu brechen):

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

Ich habe den Antworteingabeteil sowie das Speichern von Daten in der Datei nur zum Debuggen notiert. Wenn ich das Programm starte, überspringt es die getline für die erste Frage, zeigt die zweite Schleife von “Frage eingeben” an und die getline funktioniert für den Rest von ihnen. Wenn ich also eine Größe von 5 habe, füllt das Programm nur die Array-Positionen 1-4. Bitte helfen Sie. Dies ist ein einfaches Flash-Karten-Programm, das dasselbe tut, als wenn Sie Flash-Karten erstellen würden, um sie zu studieren und zu mischen.

   

Der Grund, warum es scheint, die erste Iteration zu überspringen, ist, weil, wenn Sie es tun

 cin >> size1; 

Sie geben eine Nummer ein und drücken die Eingabetaste. cin liest den Integer aus und lässt das Newline-Zeichen ungelesen im Puffer , so dass, wenn Sie getline , es ist, als würden Sie sofort die Eingabetaste drücken, und getline liest nichts (weil es vor dem Lesen des Newline-Zeichens stoppt), verwirft den Zeilenumbruch. und setzt die leere Zeichenfolge in quest1[0] . Und deshalb getline der Rest der getline “richtig”.

Fügen Sie cin.ignore('\n') über Ihrer Schleife hinzu, um das cin.ignore('\n') loszuwerden, und das sollte es funktionieren lassen, abgesehen von anderen Fehlern in Ihrem Code.

Und vergessen Sie nicht, x = x++ in nur x++ zu ändern, um UB zu vermeiden.