2012-05-22 38 views
0

本週我開始研究C++中的文本文件,並在我的練習中,我必須執行一個程序,用戶輸入文件中的行,但是... for用戶輸入的每個空間,程序向新用戶詢問。爲什麼std :: cin字符串輸入要求我爲每個空間

這裏是我的代碼:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main(void){ 
    ofstream myfile; 
    string answer; 

    do{ 
     cout << "Insert a line in the file[END to finalize]: "; 
     cin >> answer; 
     myfile.open("example.txt"); 
     myfile << answer; 
     myfile.close(); 
    }while(answer != "END"); 
} 

結果是:

在文件中插入一行[月底前敲定]:你好我的朋友

插入線在文件中[END to finalize]:在 文件中插入一行[END to finalize]:在文件中插入一行[END to finalize]:

+0

但是,這是什麼問題?順便說一句,這樣做,如果用戶在第一次輸入END,那麼「結束」將被寫入文件 – lpostula

+0

這是什麼問題?你有些描述你的bug,這是由於默認的分隔符是一個空格。考慮使用getline代替,然後你可以繼續下一個問題。 – AJG85

回答

4

operator>>(istream&, string&)基本上抓住了下一個單詞。如果你想抓住整條線,試試std::getline(std::cin, answer);。儘管如此,

getline將不包括換行符。意思是你必須做一些像myfile << answer << '\n';這樣的輸出作爲行。

順便說一句,在大多數情況下,您希望打開循環外的文件,或者打開它以附加類似myfile.open("example.txt", ios::app);之類的文件。每當你在做循環時打開文件,我很確定你將文件指針放在文件的開頭,所以你寫的每一行都會覆蓋至少前一行的第一部分。

+0

是的,它丟棄了分隔符 - 默認情況下爲'\ n' [http://www.cplusplus.com/reference/iostream/istream/getline/](http://www.cplusplus.com/reference/iostream/istream/getline /) – Matt

+0

謝謝!!它的作品^ _ ^ – NokkerZZ

0

cin >> answer會讀取一個單詞,由空格分隔。 如果你想讀一整行,然後使用getline(cin, answer)

相關問題