2011-08-13 30 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)) 

控制回路(除非你需要使用一些特别的东西来获得宽字符)。