2014-02-12 37 views
1

我已經搜索了很多關於這個網站的問題,這些問題幾乎是一樣的,但沒有任何適用於我的問題。首先,讓我告訴你,我正在使用Code :: Blocks,並使用Ubuntu。這是我的代碼:C++ - Fstream不生成新行

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    fstream file("code.out"); 

    string write; 
    getline(cin, write); 
    file << write << "\n"; 
    file.close(); 
} 

試過\n,試圖\r\n\r似乎並沒有爲我做任何事情真的)。哦,順便說一句,如果你還可以讓它逐字逐句閱讀,那將是很棒的。非常感謝你!

編輯:嘿傢伙,我解決了它。謝謝你的答案!我需要在code.out之後添加一個ios :: app!

+0

使用[std :: endl](http://en.cppreference.com/w/cpp/io/manip/endl)。 –

+0

嘗試在文件末尾添加一個刷新'file << std :: flush();'並移除'file.close()' – andre

+0

@MarcClaesen,它不起作用。我應該嘗試刪除使用命名空間標準;並把所有東西都放在std ::? – ijustwantedtosayhi

回答

2

如果您使用ofstreamhttp://www.cplusplus.com/reference/fstream/ofstream/

然後檢查它是否已打開。

然後檢查您已經閱讀一些數據 - 調試是非常方便的是

編輯

你需要

ofstream file("code.out", ios::out | ios::app) 
+0

做到了,沒有工作。即使嘗試更改code.out到code.txt,如果它有幫助...但不,沒有用。 – ijustwantedtosayhi

+0

@ijustwantedtosayhi有什麼不起作用?你是否在文件中看到任何輸出? – 0x499602D2

+0

是的,我看到輸出。而不是創建一個新的行,它將取代最後一行。 – ijustwantedtosayhi

-1

我也有這樣的問題一次。

嘗試使用ofstream而不是fstream。馬比會幫忙的,因爲我也是這樣。

+0

OP已在評論中指出此解決方案不適合他的需求。他需要做的是將*數據追加到文件末尾,因此需要openmode的'std :: ios_base :: app'。 – 0x499602D2

1

試試這個代碼:

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    fstream file("code.out", std::fstream::out); 

    string write; 
    getline(cin, write); 
    file << write << '\n'; 
    file.close(); 
} 

明確傳遞的std :: fstream的::出通過構造得到了它的正確的行爲對我和產生的換行符。

編輯:

注意事項以供將來參考,我的解決方案產生的新行,但這樣會覆蓋當前的文件中找到的數據。 Ed Heal在他的回答中附加了一個文件的代碼。然後

添加

std::fstream::app 

我的代碼將模仿艾德·赫爾姆斯的解決方案。如果追加功能實際上是您需要的,請標記他的答案。此答案適用於其他具有類似換行問題並希望覆蓋該文件的人。

+0

OP已經在評論中指出該解決方案不適合他的需求。他需要做的是將*數據追加到文件末尾,因此需要openmode的'std :: ios_base :: app'。 – 0x499602D2

+0

這個問題沒有提到追加數據。他無法讓換行顯示,並且該解決方案專門解決了這個問題。我看到ios :: app在上面的評論中如何幫助他,但是這確實對這個問題中的所有其他答案提出了這種評論。這可以幫助其他人遇到類似問題,並可能需要此類功能。而這就是StackExchange的目的 - 未來的參考。 –

+1

我同意,對於OP的真正問題,這個問題是模棱兩可的。我很感謝你爲你的帖子辯護。爲了讓我撤銷我的downvote,你必須對你的帖子進行修改(請這麼做)。順便說一句,'std :: endl'不管理換行問題,它所做的只是插入''n''字符並刷新流。 – 0x499602D2