流输出以保存东西

时间:2011-08-13 19:41:51

标签: c++

我想<<流以将控制台的所有输入保存到文件中 这是我尝试的方式

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

我没有在文件中看到非英文字符(编辑:我的意思是他们是日文,中文或韩文等)

3 个答案:

答案 0 :(得分:0)

您可以通过char流式传输char。那么这将是一个真正的二进制副本。

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

答案 1 :(得分: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();
}

答案 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))

控制循环(除了你需要使用特殊的东西来获得宽字符)。