C++ 如何让cin停止跳绳?

C++ 如何让cin停止跳绳?,c++,cout,do-while,cin,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

对不起,我不知道如何更好地问这个问题,我是一个真正的新手程序员,我不想让你做我的家庭作业,但我想了解为什么这种情况不断发生

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');
int inputScores(字符串名[],双倍分数[])
{
int count=0;//数组中学生记录数的计数器变量
再次char;//检查用户是否有更多数据
做
{
cout分数[计数];
计数++;
又不能了;
}while(再次='y'| |再次='y');
当我运行此代码并调用函数时,这种情况不断发生,我不知道如何修复它:

输入学生姓名:Arthur

输入学生分数:100

您有更多的学生记录要输入吗?(Y/N):Y
输入学生姓名:
输入学生的分数:


它跳过了“输入学生姓名问题”(不允许我键入任何内容),直接进入下一个问题。

程序不等待您输入学生姓名的原因是,在您再次阅读行中的
后,输入流中仍有一个
\n

cin >> again;
当程序达到:

getline(cin, names[count]);
它只是在一个空行中读取数据,然后转到下一行

您需要使用:

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

cin >> again;

为什么
名称
分数
不是局部变量?将它们作为一个副本传递是没有用的。cin只读取y,留下下一个getline来读取换行符。这个问题很常见,所以请尝试查看“相关”列以获得解决方案,并记住在这之前进行良好的搜索posting@tad伙计,我不太清楚你的意思,这只是老师让我们做作业的方式,把这些数组传递给这个函数,这个函数应该会用用户的输入填充数组。@user3125280在发布这个之前我搜索了很多,我还没有上过这个网站,但现在我正在看其他帖子,我想我必须阅读更多关于keybo的内容ard缓冲区和cin。谢谢!+1
std::numeric_limits::max()
也很有效,毫无疑问,跳转会发生,或者尝试失败。这很有效,但是在第一次键入名称后,我现在必须按enter键两次。你知道为什么吗?@user3758431,你可以在再次阅读
后立即移动
cin。忽略
@WhozCraig,谢谢你的投票。我同意你的看法n使用
std::numeric\u limits::max()
@WhozCraig非常感谢,我肯定需要读更多,就像我说的,我是一个新手,这是我的第一节编程课,老师从来没有提到过关于cin的任何内容。忽略().你建议我读一下这个题目吗?还有,等我有了更多的代表,我会回来给你投票的。再次感谢你!