2013-12-09 101 views
0

我的代碼:函數getline只讀第一行(或第一行)

string mess;  
getline(cin,mess); 

和我的txt文件:

hello james\n 
how are \n 
you. 

當我使用函數getline。它只是讀你好詹姆斯。有沒有一種方法可以閱讀「你好嗎」?

+1

是的,再次調用getline。正如其名稱所示,它一次只讀一行,而您的文件有兩行。 –

回答

2

你可以告訴std::getline()讀取一個特定的字符。假設字符不在流中,它將讀取整個流,例如,

std::string mess; 
if (std::getline(std::cin, mess, '\0')) { 
    // ... 
} 
else { 
    std::cout << "ERROR: failed to read input\n"; 
} 

如果你需要閱讀恰好兩行,你可能會用最好的兩次std::getline()和結果相結合,可能與居間"\n"的。

0

我不確定您是否打開其他方式來解決問題,或者您有限制,因此您需要使用getline來讀取整個文件。如果沒有,我發現這是一個很好的方式將文本文件的內容放在內存中以進一步處理它。

ifstream ifs (filename, ios::in); 
if (!ifs.is_open()) { // couldn't read file.. probably want to handle it. 
    return; 
} 
string my_string((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>()); 
ifs.close(); 

現在您應該擁有變量my_string中的整個文件。

0

如果你想讀取整個文件,你可以使用函數read()(見參考文獻here

std::ifstream f (...); 

// get length of file: 
f.seekg (0, f.end); 
int length = f.tellg(); 
f.seekg (0, f.beg); 

char * buffer = new char [length]; 

// read data as a block: 
f.read (buffer,length); 

如果你想讀只是那些2線,那麼它更容易使用getline兩次。