我正在使用以下循環從控制檯讀取未知數量的行,但它不工作。在輸入完輸入後,我一直按住Enter鍵,但循環不停止。從C++中讀取未知數量的控制檯線
vector<string> file;
string line;
while(getline(cin,line)
file.push_back(line);
我正在使用以下循環從控制檯讀取未知數量的行,但它不工作。在輸入完輸入後,我一直按住Enter鍵,但循環不停止。從C++中讀取未知數量的控制檯線
vector<string> file;
string line;
while(getline(cin,line)
file.push_back(line);
您應該將文件結尾標記爲您的應用程序。在Linux上它是Ctrl-d,它可能是按Ctrl-Z在某些Microsoft系統
而且你的應用程序應該使用eof()
問題不在於閱讀表單文件,而是從控制檯。 –
@Luchian:我不同意。我認爲Ctrl-D或Ctrl-Z是OP正在尋找的東西。但是,我認爲'eof()'建議關閉了。如果不是那樣,我會投票。 –
「在我輸入完輸入後,我一直按住Enter鍵,但循環不停止。」 - 我認爲他正在尋找一個解決方案,按回車鍵退出循環;我覺得很清楚。 –
因爲getline
將評估爲真實的,即使你只推的文件結束的條件的測試輸入。
您需要將讀取的string
與空字符串進行比較,如果爲true,則將其中斷。
vector<string> file;
string line;
while(getline(cin,line))
{
if (line.empty())
break;
file.push_back(line);
}
與換行比較並不是必須的,因爲它不會發生,因爲getline()從返回中剝離了分隔符:http://www.cplusplus.com/reference/string/getline/ – nickb
'aight,我編輯了我的回答,謝謝。 –
@LuchianGrigore你能幫我嗎?儘管我使用了相同的代碼,但是當我剛剛輸入時,它不會從循環中出來。 –
嘗試:
vector<string> file;
string line;
while(getline(cin,line))
{
if(line.empty())
break;
file.push_back(line);
}
你怎麼想知道什麼時候停止收集? –
您需要使用特殊字符或程序等待的關鍵字。當輸入時,你可以停止收集線。 – anio
「空行」和「無行」之間有區別。 –