我是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 char,但我发现的所有内容都与字符串或文件读取有关。
我知道我可以读取该行,然后将两个int从string转换为int,但这似乎是一种不好的方法(至少在C中这样做是不好的方法)。
无论如何,如果有人可以帮助我,那就太棒了,谢谢!
P.S。:我没有在substr操作之前做检查,因为根据问题的定义,该行将有一个3-char操作,一个空格,然后是一个整数。
答案 0 :(得分:3)
寻找像这样的常见问题的提示的好地方是您最喜欢的参考:
在以空格分隔的输入后立即使用,例如在
int n; std::cin >> n;
之后,getline
会消耗operator>>
在输入流上留下的结束字符,并立即返回。一个常见的解决方案是在切换到面向行的输入之前忽略输入行上的所有剩余字符cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
。
来自here。