我不了解getline +string?

这是我第一次使用stackoverflow。 我一直无法find我需要关于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; */ } } 

我注意到input部分的答案,以及为了debugging而将数据保存到文件中。 当我运行程序时,它跳过第一个问题的getline,显示“input问题”的第二个循环,getline适用于其余的部分。 所以如果我有一个5的大小,程序只填充arrays位置1-4。 请帮忙。 这是一个简单的闪存卡程序,将做同样的事情,如果你要创build闪存卡研究和洗牌。

它似乎跳过第一次迭代的原因是因为当你这样做

 cin >> size1; 

您input一个数字,然后按Enter键。 cin读取整数,并将新行字符留在缓冲区中 ,这样,当你调用getline ,就好像你立即按下回车键,并且getline什么也不读(因为它在读取换行符之前停止),丢弃换行符,并将空string置于quest1[0] 。 这就是为什么其余的getline工作“正确”的原因。

在你的循环上面添加cin.ignore('\n')来摆脱cin.ignore('\n') '\n' ,这应该使它工作,除去你的代码中的其他错误。

不要忘记把x = x++改为x++来避免UB。