我有三个 getline,但是一旦编译,输入就太多了

I have three getlines, but once I compile, there are too many inputs

本文关键字:编译 输入 太多 三个 getline      更新时间:2023-10-16
#include <iostream>
#include <string>
#include <sstream>
#include <ctype.h>
using namespace std;
int main()
{
string team1, team2, temp;
int Days;
cout << "Days: ";
cin >> Days;
int teamScore1[Days];
int teamScore2[Days];
cin.clear();
cin.ignore();
cout << "!";
getline(cin, team1);
cin.clear();
cin.ignore();
cout << "#";
getline(cin, team2);
cin.ignore();
int i = 0;
while(team1.length() > 0)
{
temp = team1.substr(0, team1.find(" "));
stringstream(temp) >> teamScore1[i];
i++;
}

我只是在测试这段代码,我有一个 cin,还有 2 个 getline 但是当我编译和运行时,输入提示比我预期的要多。提前感谢您的帮助,很抱歉这个模糊的问题,我真的不够理解,无法解释它。

问题是getline之后的cin.ignore()。如果同时删除这两个cin.ignore()问题将得到解决。

更详细

如果你检查 c++ 站点的 isstream::ignore 它基本上说cin.ignore()将从输入流中读取一个字符。

cin.ignore((:从输入序列中提取字符并丢弃它们,直到提取了 n 个字符,或者一个字符等于 delim。 C++ cin.ignore(( 参考资料

但是getline()将读取输入末尾的换行符并将其丢弃。因此,当您之后执行cin.ignore()时,它将期待一些东西并因此等待另一个输入。

getline((:如果找到分隔符,则将其提取并丢弃C++getline(( 引用

例如,如果运行以下代码:

#include <iostream>
using namespace std;
int main() {
cin.ignore();
cout << "HELLO";
}

在您输入内容之前,它不会打印输出。

希望对您有所帮助!