2012-07-16 66 views
0

for循環將隨機化65-90並使用(char)以字母A-Z顯示它們。將cout值寫入文本文件

我可以在控制檯的字母A-Z中顯示,但我無法將它們寫入文本文件。

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(); 
+6

咳咳。兩種情況的代碼都應該相同。事實並非如此。 (提示:括號很重要) – 2012-07-16 02:42:56

+3

(第二條提示:「for」字條很重要)。 – 2012-07-16 02:44:14

+0

此代碼處於如此糟糕的狀態,我拒絕去看看。請組織它並再次發佈。 – cybertextron 2012-07-16 04:23:56

回答

0

由於的std :: ofstream的從相同類型std::cout繼承是的實例(的std :: ostream的)它們的接口是相同的,一些方法被添加到文件處理流,但除此之外它們可以互換。

有了上述說明,您需要的唯一一件事就是您實際上在兩種情況下實現功能,目前:(通過閱讀您的片段)您不是。

  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);              
} 
+0

我迷路了... 那麼如何讓它們互換? – newbieprogrammer 2012-07-16 08:39:43

+0

@ user1526669帖子已被編輯並提供新的信息,您的問題已得到解答。 – 2012-07-16 08:58:52

+0

我試過了你給的方法,它給了我文本文件 – newbieprogrammer 2012-07-17 15:00:50