2011-11-02 18 views
3

我正在使用以下循環從控制檯讀取未知數量的行,但它不工作。在輸入完輸入後,我一直按住Enter鍵,但循環不停止。從C++中讀取未知數量的控制檯線

vector<string> file;  
string line; 
while(getline(cin,line) 
    file.push_back(line); 
+2

你怎麼想知道什麼時候停止收集? –

+0

您需要使用特殊字符或程序等待的關鍵字。當輸入時,你可以停止收集線。 – anio

+1

「空行」和「無行」之間有區別。 –

回答

0

您應該將文件結尾標記爲您的應用程序。在Linux上它是Ctrl-d,它可能是按Ctrl-Z在某些Microsoft系統

而且你的應用程序應該使用eof()

+0

問題不在於閱讀表單文件,而是從控制檯。 –

+3

@Luchian:我不同意。我認爲Ctrl-D或Ctrl-Z是OP正在尋找的東西。但是,我認爲'eof()'建議關閉了。如果不是那樣,我會投票。 –

+0

「在我輸入完輸入後,我一直按住Enter鍵,但循環不停止。」 - 我認爲他正在尋找一個解決方案,按回車鍵退出循環;我覺得很清楚。 –

5

因爲getline將評估爲真實的,即使你只推的文件結束的條件的測試輸入。

您需要將讀取的string與空字符串進行比較,如果爲true,則將其中斷。

vector<string> file;  
string line; 
while(getline(cin,line)) 
{ 
    if (line.empty()) 
     break; 
    file.push_back(line); 
} 
+0

與換行比較並不是必須的,因爲它不會發生,因爲getline()從返回中剝離了分隔符:http://www.cplusplus.com/reference/string/getline/ – nickb

+0

'aight,我編輯了我的回答,謝謝。 –

+1

@LuchianGrigore你能幫我嗎?儘管我使用了相同的代碼,但是當我剛剛輸入時,它不會從循環中出來。 –

1

嘗試:

vector<string> file;  
string line; 
while(getline(cin,line)) 
{ 
    if(line.empty()) 
     break; 
    file.push_back(line); 
}