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

我 = 兰德() % 255 + 32;

您可能希望这类似于:

我=兰德()%(255-32)+ 32;

你也真的想摆脱这个:

#define print cout<<

就目前而言,当(不是如果)为你的家庭作业评分的人决定杀死你时,他(她?)几乎肯定会被判无罪,理由是这是自卫。

于 2010-11-24T22:42:59.923 回答
2

我在想 ascii 表中的某处有一个 \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 回答
2

你的意思是说

i = rand() % 223 + 32;
于 2010-11-24T22:42:29.200 回答
1

您每次都打印整个字符列表这一事实意味着尽可能快地意味着只要您\a在输出字符串中生成至少几个字符(这些字符的可能性并不算太差),您将一无所获但不断的哔哔声。

于 2010-11-24T22:43:10.147 回答
0

删除,print charlist这样您就不会打印出响铃字符。

于 2010-11-24T22:44:47.127 回答