我正在尝试从包含整数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
答案 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,它将永远无法学习。