用cin读取两个整数后如何忽略换行符?
How to ignore line break after reading two ints with cin?
我是C++新手,今天才真正上手。无论如何,我面临的问题是第一行包含两个整数,而下一行包含要完成的操作。实际上,这是一个相当奇怪的问题,所以我不会详细介绍。好吧,我在阅读第一行时遇到了问题,然后是后续操作。
到目前为止,我的代码如下所示:
int m, j;
string comando;
string OPR
cin << m << l;
while (getline(cin, comando)) {
OPR = comando.substr(0, 3);
}
问题是:显然,每当我在同一行中同时写入 m 和 l 时,\n 都会保留在缓冲区中,并由换行符读取,从而在我尝试获取子字符串时造成问题。我尝试添加一个将在 m 和 l 之后读取的 char 变量,据推测,这将获得 \n。但是,它取而代之的是换行符的第一个字母,这会弄乱我的代码。我试图查看我是否有任何语法错误或任何错误,但事实并非如此。我还寻找忽略 \n 字符的方法,但我发现的所有内容都与字符串或从文件中读取有关。
我知道我可以读取该行,然后将两个整数从字符串转换为整数,但这似乎是一种糟糕的方式(至少在 C 中是一种糟糕的方式)。
无论如何,如果有人能帮助我,那就太棒了,谢谢!
P.S.: 我没有在 substr 操作之前进行检查,因为根据问题的定义,该行将有一个 3-char 操作,一个 space 然后一个整数。
寻找常见问题提示的好地方是您最喜欢的参考资料:
When used immediately after whitespace-delimited input, e.g. after int n; std::cin >> n;
, getline
consumes the endline character left on the input stream by operator>>
, and returns immediately. A common solution is to ignore all leftover characters on the line of input with cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
before switching to line-oriented input.
来自 here.
我是C++新手,今天才真正上手。无论如何,我面临的问题是第一行包含两个整数,而下一行包含要完成的操作。实际上,这是一个相当奇怪的问题,所以我不会详细介绍。好吧,我在阅读第一行时遇到了问题,然后是后续操作。
到目前为止,我的代码如下所示:
int m, j;
string comando;
string OPR
cin << m << l;
while (getline(cin, comando)) {
OPR = comando.substr(0, 3);
}
问题是:显然,每当我在同一行中同时写入 m 和 l 时,\n 都会保留在缓冲区中,并由换行符读取,从而在我尝试获取子字符串时造成问题。我尝试添加一个将在 m 和 l 之后读取的 char 变量,据推测,这将获得 \n。但是,它取而代之的是换行符的第一个字母,这会弄乱我的代码。我试图查看我是否有任何语法错误或任何错误,但事实并非如此。我还寻找忽略 \n 字符的方法,但我发现的所有内容都与字符串或从文件中读取有关。
我知道我可以读取该行,然后将两个整数从字符串转换为整数,但这似乎是一种糟糕的方式(至少在 C 中是一种糟糕的方式)。
无论如何,如果有人能帮助我,那就太棒了,谢谢!
P.S.: 我没有在 substr 操作之前进行检查,因为根据问题的定义,该行将有一个 3-char 操作,一个 space 然后一个整数。
寻找常见问题提示的好地方是您最喜欢的参考资料:
When used immediately after whitespace-delimited input, e.g. after
int n; std::cin >> n;
,getline
consumes the endline character left on the input stream byoperator>>
, and returns immediately. A common solution is to ignore all leftover characters on the line of input withcin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
before switching to line-oriented input.
来自 here.