2017-09-04 88 views
1

我想從C++中的文件讀取輸入,並且如果沒有輸入,我需要給出錯誤消息。檢查文件是否只包含空格C++

此語句工作,如果該文件是完全空:

if (f.peek() == std::ifstream::traits_type::eof()) return error("Empty file"); 

其中誤差()是一個簡單的函數:

int error(string message){ 
    cerr << "ERROR: " << message << "\n"; 
    return -1; 
} 

我如何檢查只包含空白,所以我可以把文件提出相同的錯誤?如7個換行符?
如果文件包含任何內容,但只包含空白字符,我應該繼續正常執行。

+2

您必須閱讀並檢查每一個字符即可。 ['std :: isspace()'](http://en.cppreference.com/w/cpp/string/byte/isspace)可能會派上用場。 – user0042

+4

僅包含空格的文件的機會是多少?這似乎是一個XY問題。 –

+0

@ Neil沒錯。 – user0042

回答

0

你可以在文件輸入上使用std::istream_iterator並用std:isspace()檢查單個字符,我想。

但我不知道這是否真的你想做什麼。爲什麼不嘗試閱讀任何你想閱讀的內容,並且只在你閱讀/解析失敗時擔心什麼?

0

閱讀字符和檢查std::isspace可能會有所幫助。是這樣的:

char c; 
bool isEmpty = true; 
while (f.get(c)) 
{ 
    if(!std::isspace(c)) 
    { 
    isEmpty = false; 
    break; 
    } 
} 

這樣,isEmpty將它說什麼

1

掃描文件提前,如果它僅包含空格會非常低效

我相信你真正需要的,是跟蹤,如果一些非空白的數據可以被讀取,如果沒有引發錯誤:

std::string line; 
    std::vector<std::string> lines_with_data; 
    while(std::getline(f,line)) { 
     // check if line is empty or contains only whitespace 
     if(!(line.empty() || 
      (std::find_if_not(line.begin(),line.end(),std::isspace) != line.end())) { 
      lines_with_data.push_back(line); 
     }   
    } 
    if(lines_with_data.empty()) { // No data could be found 
     return error("Empty file"); 
    } 
+1

謝謝,這種方法工作(解析後檢查),我錯誤地嘗試以類似的方式檢查一個空文件。 – db236