使用getline输入文件检查>> c ++中的运算符

时间:2017-02-19 15:02:05

标签: c++ algorithm input getline

我在这里编写了一个代码,它逐行读取输入文件并创建一个向量矢量,然后我将其用作矩阵,稍后在我的作业中。这是代码:

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循环或代码中的其他位置写入某处?

非常感谢你提前。

2 个答案:

答案 0 :(得分:1)

来自cppreference.com

  

如果提取失败,则将零写入值并设置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!