c++ - Cin 没有读取我的输入

标签 c++ cin

一定是我累了,但我似乎无法弄清楚为什么我的程序不会为 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/

相关文章:

c++ - 如何延迟成员变量的初始化

python - 将 Eigen 数组从 C++ 传输到 Python 时地址发生变化

C++:字符串中的空格阻止我比较 cin 输入。

c++ 在同一行使用 cout 和 cin 的问题 (xcode8)

c++ - 解决 C++ 构造函数和调用歧义

c++ - 用c++将信息写入空窗口

c++ - 指针与 auto_ptr 与 shared_ptr

C++ - 从控制台获取字节

c++ - 将值输入到结构

c++ - 如果输入是一个字符然后在 C++ 中存储在一个整数中,为什么 cin 会得到奇怪的值?