怎么让cin停止跳过?

时间:2014-06-20 00:42:22

标签: c++ cout do-while cin

抱歉,我不知道如何更好地问这个,我是一个非常新手的程序员而且我不是在找你做我的作业,但我想知道为什么会这样。

int inputScores(string names [], double scores [])
{
  int count = 0;  // counter variable for number of student records in array
  char again;     // To check if user has more data
  do
  {
    cout << "Enter student's name: ";
    getline(cin, names[count]);
    cout << "\nEnter student's score: ";
    cin >> scores[count];
    count++;
    cout << "\nDo you have more student records to enter?(Y/N): ";
    cin >> again;

  }while(again == 'y' || again == 'Y');

当我运行此代码并调用该函数时,这种情况不断发生,我不知道如何修复它:

输入学生的姓名:亚瑟

输入学生的分数: 100

您是否有更多学生记录要输入?(是/否): y
输入学生的姓名:
输入学生的分数:

它会跳过&#34;输入学生的姓名问题&#34; (不允许我输入任何内容)并直接进入下一个问题。

1 个答案:

答案 0 :(得分:2)

程序不等待您输入学生姓名的原因是,在您阅读该行中的\n之后,输入流中仍然留有again

cin >> again;

当程序到达时:

getline(cin, names[count]);

它只是读取一个空行并移动到下一行。

您需要使用:

int maxCharsToIgnore = 100; // This seems large enough
                            // for your use case.
cin.ignore(maxCharsToIgnore,'\n');

之后

cin >> again;