2015-02-10 64 views
0

您好我編寫了一個非常基本的密碼生成器,我想使用ofstream將循環的輸出寫入文件。我的想法是每次循環運行從陣列abc輸出一個人聲。我不知道要如何使它工作和obvs。有一個更好的方法來做到這一點。無法將循環的輸出寫入文件

#include <stdio.h> 
#include <iostream> 
#include <cstdlib> 
#include <time.h> 
#include <fstream> 


using namespace std; 

int main(){ 

    srand(time(0)); 

    cout << "You'r PW is: \t" << endl; 
    char abc [] {'A', 'a', 'B' ,'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'x', 'Y', 'y', 'Z', 'z'}; 

    for(int i = 0; i <15; i++){ 
     int randomNum = rand() % 53; 
     cout << abc[randomNum]; 
     ofstream fob; 
     fob.open("contr.txt"); 
     fob << abc[randomNum]; 
    } 
} 

順便說一句,我得到的字符像','和' - >'這不是我的數組。

+1

難道你不想要mod 52而不是mod 53嗎? – Cornstalks 2015-02-10 20:23:31

+0

沒有必要創建一個字符數組來產生隨機字符。 – user3437460 2015-02-10 20:26:25

+0

那麼我該怎麼做呢? – Andy 2015-02-10 20:28:20

回答

2

必須移動

ofstream fob; 
fob.open("contr.txt"); 

退出循環。現在你在每次迭代中重寫文件。

+2

索引數組的邊界也是一個問題。假設所有的字母都在數組中,數字應該是52,但是有2個字母丟失。 – 2015-02-10 20:40:54

1

這裏的問題很簡單,有兩個解決方案。 您的程序所做的是在循環的每次迭代中創建並打開一個新文件流,但默認情況下,ofstream會覆蓋它打開的文件,以便您可以將流打開循環(更好的方式)或添加標記ios::app作爲流開啓器的第二個參數,以便附加您輸出的內容。

1

此外,您應該使用int randomNum = rand() % 52;。 在集合{0,1,2,... 51}中選擇一個數字,假設您忘記在數組中放置'X',這將成爲數組的所有可能索引之一。