2013-03-22 65 views
0

我想從其中包含空格的文件中讀取一行。儘管一切我試過,我所有的研究,似乎沒有任何工作,這是我現在學嘗試從文件讀取空間的問題

void read_name(fstream& in_file, comp& cmp) 
{ 
    char buff[80]; 
    in_file.getline(buff, 79, '\n'); 
    in_file >> buff; 

    cout << "NAME: " << buff << endl; 

    cmp.set_name(buff); 
    in_file.getline(buff, 79); 
} 

無論出於何種原因,這仍然會讀,直到它看到一個空格,然後停止。任何幫助將非常感激。我用直C++並不是那麼棒,所以我很可能只是錯過了一些東西。

回答

0

由於您使用的是C++,我建議您使用stl字符串而不是char數組。

std::string linestr; 
while(std::getline(input, linestr)) 
{ 
    // process line 
} 

其中輸入是你的ifstream。

+1

由於我們使用的是標準C++,我建議您調用C++標準庫「C++標準庫」,而不是「STL」。 – 2013-03-22 18:57:02

+0

std *不是stl ...已編輯的帖子。審查它。 – CLearner 2013-03-22 22:03:19

1
in_file.getline(buff, 79, '\n'); 

那裏。你讀一行(假設該行不超過78個字符)。那麼你爲什麼要這樣做呢?

in_file >> buff; 

這會覆蓋剛纔讀到的下一個單詞。如果你想要下一行,那麼再次調用getline。

但是最好使用std::string和自由函數std::getline,這樣你就不必指定行長度。

std::string buff; 
std::getline(in_file, buff); 
+0

我試過了,但在「NAME:」void read_name(fstream&in_file,comp&cmp)後面沒有打印出任何東西 std :: string line; (std :: getline(in_file,line)) if(std :: getline(in_file,line)) cout <<「NAME:」<< line << endl; } cmp.set_name(buff); in_file.getline(buff,79); } – roundtheworld 2013-03-22 19:00:52

+0

@ user1595510:然後出現其他問題,或許文件內容不符合您的期望,我不知道。沒有更多信息,我無法診斷。 http://sscce.org/ – 2013-03-22 19:07:36

1

in_file >> buff; 

被消滅了,你剛剛從文件中讀取的buff內容。 如果你用調試器瀏覽你的代碼,看着buff的內容,那麼你會看到這發生。

+0

1)這應該是一個評論,而不是答案。 2)以文本模式打開的文件(默認)用於處理線尾的差異。 – 2013-03-22 18:59:39

+0

@BenjaminLindley,公平點。將相應更正。 – Rich 2013-03-22 19:02:37