2012-02-12 27 views
1

我對此仍然很陌生,所以這可能是非常簡單的事情,我可能會因爲詞彙太多而失敗,但無論如何我會問,因爲我無法確定它自己。C++:對一個空輸入與空輸入文件作出反應

我在做一個程序,要求不同的命令來改變某些座標,如果你給一個空命令,它只是要求一個新的命令。問題是,如果你給程序一個輸入文件來讀取來自 的命令(像這樣: ./ myprogram < inputfile ) 並且那個文件是空的,它會在一個循環中結束並且無休止地要求一個新的命令。當沒有更多輸入被讀取時,它應該能夠退出程序。但是它怎麼會有所作爲,因爲它不知道命令是從一個文件還是一個一個地給出的?或者有沒有辦法讓它知道?畢竟,如果一次隻手動提供一個,一個空的命令並不意味着不會有更多的進來。我希望這聽起來不太傻...

+0

您只需檢查EOF,例如'while(infile){...}如果infile處於EOF,它將評估爲false – 2012-02-12 20:40:02

回答

1

我不完全確定一個「命令」是什麼,但它聽起來好像你正在閱讀單獨的行,你想排除空(或拼寫錯誤)線。一個簡單的方法做,這是讀線,但第一跳過前導空白,直到有沒有更多的行:

for (std::string line; std::getline(in >> std::ws, line);) { 
    process(line) 
} 

in >> std::ws跳過所有前導空格,即所有空格,換行,製表符等的表達一旦這個完成後,std::getline()只讀取一行的內容並將其寫入line。如果跳過前導空白後沒有任何數據,則std::getline()將失敗,因爲已達到輸入行。如果需要以某種方式對line進行解碼,您可以將其放入std::istringstream並從那裏解碼。