我在这里编写了一个代码,它逐行读取输入文件并创建一个向量矢量,然后我将其用作矩阵,稍后在我的作业中。这是代码:
vector<vector<int>> inputMatrix;
string line;
while(!file.eof())
{
getline(file, line);
stringstream ss(line);
int num;
vector<int> temp;
while(ss >> num)
{
temp.push_back(num);
}
inputMatrix.push_back(temp);
}
但是,某些输入文件可能包含非整数值。我想为矩阵创建集成一个输入检查功能,这样当输入文件中有一个非整数值时,我的程序就会退出。
我怎样才能做到这一点?是否可以在此while循环或代码中的其他位置写入某处?
非常感谢你提前。
答案 0 :(得分:1)
如果提取失败,则将零写入值并设置failbit。如果 提取导致值太大或太小而无法适应 value,std :: numeric_limits :: max()或std :: numeric_limits :: min() 写入并设置failbit标志。
所以你可以在while循环后添加一个if子句:
((3,1), 'Good')
答案 1 :(得分:0)
我想为矩阵创建集成一个输入检查功能,这样当输入文件中有一个非整数值时,我的程序就会退出。
stringstream
已经为你做了这项检查。您可以在while循环后简单地测试其状态。如果它无法解析非整数值,则failbit将设置为true。
这是一个working demo(有一些小改进):
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
int main() {
vector<vector<int>> inputMatrix;
string line;
while(getline(cin, line))
{
istringstream iss(line);
int num;
vector<int> temp;
while(iss >> num)
{
temp.push_back(num);
}
if(!iss) {
cout << "Bad input detected!" << endl;
return 1;
}
inputMatrix.push_back(temp);
}
return 0;
}
输入
12 13 46 3
42 2.6 5
输出
Bad input detected!