我想<<流以将控制台的所有输入保存到文件中 这是我尝试的方式
ofstream of("file.txt");
while(1)
{
string str;
cin>>str;
of<<str;
}
我没有在文件中看到非英文字符(编辑:我的意思是他们是日文,中文或韩文等)
答案 0 :(得分:0)
您可以通过char流式传输char。那么这将是一个真正的二进制副本。
ofstream of("file.txt");
while(1)
{
char c;
cin>>c;
of<<c;
}
答案 1 :(得分:0)
使用格式化的提取运算符进行流式传输是一个糟糕的选择。具体来说,它将消耗所有的空白区域。
如果是我,我会使用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();
}
答案 2 :(得分: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))
控制循环(除了你需要使用特殊的东西来获得宽字符)。