0

for 循环是随机化 65 - 90 并使用 (char) 以字母 AZ 显示它们。

我可以在控制台中以字母 AZ 显示,但我无法将它们写入文本文件。

for(i = 0; i < 26; i++)
    cout << (char) (letter[i] + 'A' - 1) << " ";

cout << endl;

ofstream output;
output.open("output.txt");
output << (char)letter[i] + 'A' - 1 << endl;
output.close();
4

1 回答 1

0

由于std::ofstream继承自与 ( std::ostreamstd::cout )的实例相同的类型,因此它们的接口相同,因此将一些方法添加到文件处理流中,但除此之外它们是可互换的。

如上所述,您唯一需要的是,您实际上在两种情况下都以相同的方式实现功能,目前:(通过阅读您的代码段)您不是。

  1. std::ofstream示例没有任何循环
  2. std::ofstream片段中的评估顺序不同(因为您不使用()

为了确保无论您是写入文件还是标准输出都使用相同的实现,您可以将代码包装在一个函数中,使其接受对std::ostream的引用,如下面的代码片段所示。

#include <iostream>                                                           
#include <fstream>                                                            

void                                                                          
do_whatever (std::ostream& output_stream)                                     
{                                                                             
  int letter[] = {                                                            
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,                                         
    15,16,17,18,19,20,21,22,23,24,25,26                                       
  };                                                                          

  for (int i =0; i < 26; ++i)                                                 
    output_stream << (char) (letter[i] + 'A' - 1) << " ";                     
}                                                                             

int                                                                           
main (int argc, char *argv[])                                                 
{                                                                             
  std::ofstream file_stream;                                                  

  file_stream.open ("file.txt");                                              

  do_whatever (file_stream);                                                  
  do_whatever (std::cout);                                                    
} 
于 2012-07-16T05:37:09.537 回答