2016-07-04 13 views
0

ofstreamを使用して、内部にテキストが格納されたランダムファイルを生成しています。しかし、生成するファイル数が.txtであることを指定すると想定される変数fileNumのように見えます。生成された.txtファイルの数には、実際に指定された量との差異があります。時にはその4オフ(または3または2)、そして時々それはそれを正しく取得します。私が間違って何かなりわからないんだけど、私はC++ランダムファイルジェネレータループは正しい量のファイルを生成しません

string genRandStr(int len, int seed) { 

    // Add a seed, so a different random number is generated each time 
    srand(time(seed)); 
    char alphaNum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; 

    int strlen = sizeof(alphaNum) - 1; 
    string randStr = ""; 
    for (int i = 0; i < len; i++) { 
     randStr += alphaNum[rand() % strlen]; 
    } 

    return randStr; 
} 
//main function 

int main() 
{ 
    int fileNum; 
    cout << "FILEWARS - SAFE VERSION - USE WITH CARE" << endl; 
    cout << "Made By: David Yue" << endl; 
    cout << "Enter the amount of files you wish to create: "; 
    cin >> fileNum; 
    if (cin.fail()) { 
     cout << "Value must be an integer." << endl; 
    } 
    if (fileNum >= 30) { 

     cout << "SAFE VERSION RESTRICTION: File Amount may not exceed 30" << endl; 
     main(); 
    } else { 
     ofstream file1; 
     stringstream fileName; 
     for (int i = 0; i <= fileNum; i++) { 

      fileName << genRandStr(6, time(i)) << ".txt"; 

      file1.open(fileName.str());; 
      for (int i = 0; i < 10; i++) { 
       file1 << genRandStr(100, time(i)) << "\n"; 
      } 

      file1.close(); 
      file1.clear(); 
      fileName.str(""); 
      fileName.clear(); 
      Sleep(1000); 
     } 
     system("pause"); 
    } 
} 
+0

'fileNum'の出力を試してみましたか? – John3136

+0

@ John3136私はショットを与えてみましょう –

+0

ええ。私はその問題を@FirstStepから見つけ出し、FileNumは正しく印刷しています。しかし、まだバグが発生しています。 –

答えて

2

いくつかの点で、それは新しいファイルを作成しませんので、それは同じファイル名を生成していると非常に新しいです、それは以上の古いものを乗ります代わりに。私はあなたが任意のベース名(例MyFile)を選択し、+の横にcountを追加することをお勧めします。あなたのカウントを1で初期化し、すべての繰り返し/新しいファイルでcountを増やしてください。 、file1file2file3 ...など

それとも、あなたはまだ乱数生成器を使用する必要がある場合は、srand(time(seed));(とどのようにあなたがseed sの値を選んだのにもかかわらず)と呼ばれるべきである:結果はあなたにすべてのファイルの例の一意の名前を取得する必要がありますプログラムの実行中に1回だけ実行され、すべての呼び出しでではなく、となります。したがって、seedの代わりにNullを使用し、コードの先頭にグローバルにsrand(time(Null));と記載してください。 を一度だけに変更すると、rand();を自由に使用できるようになります。しかし、文字列はまだ同じsizeofになる可能性があるので、% strlenに注意してください。

+0

'count'問題が修正されたようですが、ランダムなファイル名を削除しました –

+0

@DavidYueまたはループ内の任意の名前に' i + 1'を追加してください。私たちが助けてくれてうれしいです:) –

関連する問題