我想< <流從控制檯的所有輸入保存到一個文件中 這裏是我試過流輸出到保存的東西
ofstream of("file.txt");
while(1)
{
string str;
cin>>str;
of<<str;
}
我沒有看到文件中的非英語字符(編輯:我的意思是他們是日文,中文或韓文等)
我想< <流從控制檯的所有輸入保存到一個文件中 這裏是我試過流輸出到保存的東西
ofstream of("file.txt");
while(1)
{
string str;
cin>>str;
of<<str;
}
我沒有看到文件中的非英語字符(編輯:我的意思是他們是日文,中文或韓文等)
使用格式化的提取操作符進行流式處理是一個糟糕的選擇。具體來說,它將消耗所有的空白空間。
如果是我,我會複製使用std::getline
或istream::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();
}
只是一對夫婦的點作爲首發:
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))
控制迴路(除非你需要使用一些特別的東西來獲得寬字符)。
請說明。你的意思是你在控制檯中輸入了「非英文」字符嗎? –
它們可能被編碼爲UTF-8。將文件讀回內存並在控制檯上打印。如果控制檯設置正確,您將看到按預期打印的非ASCII字符。 –
@馬丁和奧利,非常感謝,我會嘗試你的建議。我的意思是韓文,阿拉伯文等字符。 – Dalton