cin.ignore(INT_MAX)正在清除所有内容

时间:2014-10-02 11:16:35

标签: c++ input cin

我正在尝试从包含整数T的文件和随后的T语句中获取输入。

#include<iostream>
#include<string>
#include<vector>
#include<iterator>
#include<sstream>
#include<algorithm>
#include<limits.h>
#include<stdlib.h>
#include<stdio.h>

using namespace std;

int main() {
    int T;
    cin >> T;
    int m = 0;
    cin.ignore(INT_MAX);
    while(m < T) {
        string sentence;
        getline(cin,sentence,'\n');
        cout << "Case #" << m << ": " << sentence << endl;

        m++;
    }
}

在输入5个字符串时,我得到以下输出。

Case #0: 
Case #1: 
Case #2: 
Case #3: 
Case #4:       

这是文件数据

5
this is a test
foobar
all your base
class
pony along

1 个答案:

答案 0 :(得分:1)

你期待发生什么?

您告诉输入流跳过数十亿个字符或直到达到文件结尾,以先发生者为准:

cin.ignore(INT_MAX);

然后您尝试再次从流中读取:

    getline(cin,sentence,'\n');

失败是因为它在EOF,但你没有检查读取操作是否成功。

然后在每次读取失败后,打印由于读取失败而未更改的空字符串:

    cout << "Case #" << m << ": " << sentence << endl;

然后重复尝试多次读取一行。

不要只是要求StackOverflow修复您的程序,为什么不尝试修改它以找出错误?

e.g。

if (getline(cin,sentence,'\n'))
  cout << "Case #" << m << ": " << sentence << endl;
else
  throw std::runtime_error("getline failed");

学会隔离代码中的问题并确定其行为不当的地方是一项重要技能,通过编写整个程序然后转向StackOverflow,它将永远无法学习。