我想< <流从控制台的所有输入保存到一个文件中 这里是我试过流输出到保存的东西
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