一定是我累了,但我似乎无法弄清楚为什么我的程序不会为 init 和 end 读取我的 cin 值,这应该是我程序的起点和终点。它的输入设置方式是第一行是案例数量,然后会有一个新行,它将是一个字符串,然后在下一行将有两个由空格分隔的整数,所以我觉得我构建它的方式是正确,但是当我调试代码时,无论是否初始化变量,init 和 end 的值都不会改变。
int case_count;
string name;
int init = 0;
int end = 0;
cin >> case_count;
cin.ignore(numeric_limits<::streamsize>::max(),'\n');
for (int i = 0; i < case_count; ++i) {
cout << "Case " << i << "\n";
getline(cin, name);
cin.ignore(numeric_limits<::streamsize>::max(), '\n');
cin >> init;
cin >> end;
示例输入
3 flap 1 3 swoop 0 9 flip 0 6
这使得继续执行其余代码变得困难。
最佳答案
问题是您在循环中调用了ignore
。问题在于 std::getline
提取(并丢弃)换行符,这意味着您在循环中调用 ignore
将读取并丢弃下行(具有两个数字的行)。
除此之外,当使用输入运算符读取数字或字符串时,运算符将跳过前导空白,所以即使getline
没有读取换行符,如果没有 ignore
调用,它仍然可以工作。
但是,在您读取数字后,输入流中会留下一个换行符,下一次迭代 std::getline
调用将选取该换行符,然后是 name
将为空,因此您应该按照 M.M 在评论中的建议,将 ignore
调用移至循环中的last。
关于c++ - Cin 没有读取我的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33162832/