c++ - 用 cin 读取两个整数后如何忽略换行符?

标签 c++ cin

我是 C++ 新手,今天我已经开始使用它了。无论如何,我面临的问题是第一行包含两个整数,接下来的行包含要完成的操作。实际上,这是一个相当奇怪的问题,所以我不会详细介绍。嗯,我在读取第一行以及后续操作时遇到问题。

到目前为止,我的代码如下所示:

int m, j;
string comando;
string OPR
cin << m << l;

while (getline(cin, comando)) {
     OPR = comando.substr(0, 3);
}

问题是:显然,每当我在同一行中写入 m 和 l 时,\n 都会保留在缓冲区中,并且由换行符读取它,当我尝试获取子字符串时会导致问题。我尝试添加一个 char 变量,该变量将在 m 和 l 之后读取,据说会得到\n。然而,它得到的是换行符的第一个字母,这会弄乱我的代码。我试图查看是否有任何语法错误或其他任何错误,但事实并非如此。我还寻找了忽略\n 字符的方法,但我发现的所有内容都与字符串或从文件中读取有关。

我知道我可以读取该行,然后将两个 int 从 string 转换为 int,但这似乎是一个不好的方法(至少在 C 中这是一个不好的方法)。

无论如何,如果有人能帮助我,那就太好了,谢谢!

P.S.:我在 substr 操作之前不进行检查,因为根据问题的定义,该行将有一个 3 个字符的操作,一个空格,然后是一个整数。

最佳答案

寻找常见问题提示的好地方是您最喜欢的引用:

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++ - 用 cin 读取两个整数后如何忽略换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32663049/

相关文章:

c++ - STL vector 数据提取

c++ - 在 C++ Builder 10 中加载 DLL 时,变体或安全数组被锁定

c++ - 更新 DATETIME 导致 BB10 上的 sqlite 错误

c++ - 我如何在不中断行的情况下在 C++ 控制台中写入文本

c++ - Linux 和 Windows 下混合 cin 和 getline

c++ - 为什么这个 C++ 代码在每一行之后打印一个?

c++ - 在 C++ 中使用 C 头文件时避免全局变量/方法名称冲突

c++ - 在 CLinkCtrl 上按下空格键后调用 TrackPopupMenu() 会导致发出警告消息蜂鸣声。为什么?

c++ - 如何在 C++ 中捕获运行时错误?

c++ - cin 和 getline 跳过输入