0

ジャンクファイルジェネレーターの開発を始めているのですが、なぜか大量に使うとファイルが完成するまでビープ音が鳴り続けてしまい、asciiテーブルのどこかに\aという文字があるのか​​、オーバーフローしているのかと思いますとなり、エラー ビープが鳴ります。なぜこれが私に向かって叫んでいるのか説明したい人はいますか?

#include <string>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <time.h>
#include <windows.h>
#define print cout<<

using namespace std;

int numberof,i;
char charvalue;
string charlist,filename;

int main()
{
    srand (time(NULL));
    print "What do you want the name of your file to be?(with a .txt extension)\n";
    getline(cin,filename);
    print "\nHow many characters do you want?\n";
    cin>>numberof;

    for(numberof>0;numberof!=0;numberof--)
        {
        i = rand() % 255 + 32;
        charvalue=i;
        charlist=charlist+charvalue;
        print charlist;
        }

    ofstream writefile(filename.c_str());
    writefile<<charlist;
    writefile.close();
    ShellExecute(NULL, "open", filename.c_str(), NULL, NULL, SW_SHOWNORMAL);
    return 0;
}

この時点で、最終的に文字は問題なく出力されているように見えますが、テキスト ファイルには文字の 1/4 しか書き込まれていません。理由を知っている人はいますか?

4

5 に答える 5

7

i = ランド () % 255 + 32;

あなたはおそらくこれを次のようにしたいでしょう:

i = rand() % (255-32) + 32;

あなたも本当にこれを取り除きたいです:

#define print cout<<

現状では、あなたの宿題を採点している誰かがあなたを殺すことを決定した場合、(そうでなくても) 彼 (彼女?) は自己弁護であったという理由でほぼ確実に無罪となるでしょう。

于 2010-11-24T22:42:59.923 に答える
2

あなたが言うつもりだった

i = rand() % 223 + 32;
于 2010-11-24T22:42:29.200 に答える
2

アスキーテーブルのどこかに \a 文字があると思います

はい、7位だと思います。

また、これ:

for(numberof>0;numberof!=0;numberof--)

これである必要があります:

 for(; numberof > 0; numberof--)

条件は中間にあり、初期化は必要ないため、for ループの先頭に空のステートメントがあります。

また、印刷可能な ASCII 文字の範囲は 32 から 126 までしかないため、次のように記述する必要があります。

i = rand() % 95 + 32;

また、以下は毎回新しい文字列オブジェクトを生成するため、非常に非効率的です。

charlist=charlist+charvalue

代わりにこれを行います:

charlist.push_back(charvalue);
于 2010-11-24T22:40:13.620 に答える
1

毎回 charlist 全体を出力するということ\aは、出力文字列に少なくとも数文字を生成するとすぐに (確率はそれほど悪くありません)、何も得られないことを意味します。しかし絶え間ないビープ音。

于 2010-11-24T22:43:10.147 に答える
0

を削除してprint charlist、ベルの文字を印刷しないようにします。

于 2010-11-24T22:44:47.127 に答える