2011-08-13 29 views
-1

我想< <流從控制檯的所有輸入保存到一個文件中 這裏是我試過流輸出到保存的東西

ofstream of("file.txt"); 
while(1) 
{ 
    string str; 
    cin>>str; 
    of<<str; 
} 

我沒有看到文件中的非英語字符(編輯:我的意思是他們是日文,中文或韓文等)

+0

請說明。你的意思是你在控制檯中輸入了「非英文」字符嗎? –

+0

它們可能被編碼爲UTF-8。將文件讀回內存並在控制檯上打印。如果控制檯設置正確,您將看到按預期打印的非ASCII字符。 –

+0

@馬丁和奧利,非常感謝,我會嘗試你的建議。我的意思是韓文,阿拉伯文等字符。 – Dalton

回答

0

你可以通過字符串流char。那麼這將是一個真正的二進制副本。

ofstream of("file.txt"); 
while(1) 
{ 
    char c; 
    cin>>c; 
    of<<c; 
} 
+0

謝謝阿迪,這很好。我正在學習流的基礎知識,這很有幫助。 – Dalton

+0

@Dalton:這不是你正在尋找的解決方案。它不起作用(嘗試看看)。 –

+0

如果這被認爲是不正確的,請downvote和可選的留下解釋原因的評論。 – Kev

0

使用格式化的提取操作符進行流式處理是一個糟糕的選擇。具體來說,它將消耗所有的空白空間。

如果是我,我會複製使用std::getlineistream::rdbuf

std::getline

// Copy standard input to named file, one line at a time. 
#include <iostream> 
#include <fstream> 

int main (int argc, char **argv) { 
    std::string s; 
    std::ofstream of(argv[1]); 
    while(std::getline(std::cin, s)) { 
    of << s << "\n"; 
    } 
} 

istream::rdbuf

// Copy entire standard input stream to named file in one go 
#include <iostream> 
#include <fstream> 

int main (int argc, char **argv) { 
    std::ofstream(argv[1]) << std::cin.rdbuf(); 
} 
0

只是一對夫婦的點作爲首發:

ofstream of("file.txt");

如果你想看看日本,中國和韓國字符,你不應該在這裏使用ofstream。你想要一個寫寬字符的流:一個std::wofstream。您還將擁有一個語言環境的流。詳細信息請參見Why does wide file-stream in C++ narrow written data by default?

另一點:你顯然有一個using namespace std;。你可以在Stack Overflow找到很多問題,表明這是一個壞主意。鍵入那些額外的五個字符並不是很難,它避免了標準庫中的名稱污染你的名字空間的問題,並且它使得代碼更清晰。

while(1)

你的循環沒有任何break陳述逃脫循環,所以這個加while (1)意味着你的程序將永遠不會停止。它只是繼續前進,繼續前進。您希望它在輸入流中遇到錯誤或文件結尾時停止(或者應該希望它停止)。

一個更好的辦法是使用結構如

while (std::getline (std::cin, s)) 

控制迴路(除非你需要使用一些特別的東西來獲得寬字符)。