Cin没有读我的输入

时间:2015-10-16 04:55:55

标签: 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

这使得很难继续使用其余的代码。

1 个答案:

答案 0 :(得分:2)

问题是您在循环中调用ignore。这个问题是std::getline提取(并抛弃)换行符,这意味着循环中的ignore调用将读取并丢弃 next 行(带有两个数字)。

除此之外,当使用输入操作符读取数字或字符串时,操作符跳过前导空格,因此即使getline没有读取换行符,如果没有ignore电话,它仍然有用。

但是,在您读取数字后,输入流中会留下换行符,下一次迭代std::getline调用将获取该换行符,然后name将为空,因此您应该按照评论中的MM的建议,在循环中将ignore调用移至 last