2

嘿,我正在尝试将一些数字写入文件,但是当我打开文件时它是空的。你能帮帮我吗?谢谢。

/** main function **/
int main(){

    /** variables **/
    RandGen* random_generator = new RandGen;
    int random_numbers; 
    string file_name;   

    /** ask user for quantity of random number to produce **/
    cout << "How many random number would you like to create?" << endl;
    cin >> random_numbers;

    /** ask user for the name of the file to store the numbers **/
    cout << "Enter name of file to store random number" << endl;
    cin >> file_name;

    /** now create array to store the number **/
    int random_array [random_numbers];

    /** file the array with random integers **/
    for(int i=0; i<random_numbers; i++){
        random_array[i] = random_generator -> randInt(-20, 20);
        cout << random_array[i] << endl;
    }

    /** open file and write contents of random array **/
    const char* file = file_name.c_str();
    ofstream File(file);

    /** write contents to the file **/
    for(int i=0; i<random_numbers; i++){
        File << random_array[i] << endl;
    }

    /** close the file **/
    File.close();   

    return 0;
    /** END OF PROGRAM **/
}
4

3 回答 3

4

您不能在堆栈上声明一个只有在运行时才知道大小的整数数组。但是,您可以在堆上声明这样的数组:

int *random_array = new int[random_numbers];

不要忘记delete [] random_array;在 main() (以及)末尾添加delete random_generator;以释放您使用分配的内存new。当您的程序退出时,此内存会自动释放,但无论如何释放它是个好主意(如果您的程序增长,以后很容易忘记添加它)。

除此之外,您的代码看起来还不错。

于 2010-04-06T02:26:52.003 回答
0

无需循环两次或保留数组或向量。

const char* file = file_name.c_str();
ofstream File(file);

for(int i=0; i<random_numbers; i++){
    int this_random_int = random_generator -> randInt(-20, 20);
    cout << this_random_int << endl;
    File << this_random_int << endl;
}

File.close();
于 2010-04-06T02:45:39.900 回答
0

如果我只是填写你的 RandGen 类来调用rand,该程序在 Mac OS X 10.6 上运行良好。

How many random number would you like to create?
10
Enter name of file to store random number
nums
55
25
44
56
56
53
20
29
54
57
Shadow:code dkrauss$ cat nums
55
25
44
56
56
53
20
29
54
57

此外,我认为它没有理由不在 GCC 上工作。你在什么版本和平台上运行?能提供完整的源码吗?

于 2010-04-06T02:37:41.570 回答