簡體   English   中英

ifstream:跳過包含NaN的閱讀行

[英]ifstream: Skip reading lines containing NaN

我正在VS2012 C ++上使用ifstream讀取文本文件。 有沒有一種簡單的方法可以跳過包含“ NaN”的行?

ifstream loadFile;
loadFile.open("data.txt", ios::in);

double x;
int numLine = 3;
int numCol = 4;
vector< vector<int> > data(numLine, vector<int> numCol);

for( int i=0; i< numLine; i++){
    for ( int j=0; j< numCol; j++){
        loadFile >> x ;
        data[i][j] = x;
    }
} 

文件樣本:

2.4 4.6 6.8 0.34
5.34 3.4 NaN 1.1 
2 -4 -6 5 

很難檢測到輸入字符串實際上是"NaN"但是您可以執行

if (!(loadFile>>x)) // Read might fail on "NaN"
{
    loadFile.clear(); // Reset error state
    loadFile.ignore(3); // This assumes we only fail on NaN.
}

這將僅忽略單個輸入。 當然,如果您的輸入可以包含-NaN或其他長度為!= 3的輸入,那么您需要變得更聰明。 如果您需要忽略整行,則需要在錯誤行之后重設i

您可以使用isnan函數: http : isnan

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM