C ++ ofstream не может записать в файл - PullRequest
2 голосов
/ 06 апреля 2010

Эй, я пытаюсь записать некоторые цифры в файл, но когда я открываю файл, он пуст. Вы можете помочь мне здесь? Спасибо.

/** 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 **/
}

Ответы [ 3 ]

4 голосов
/ 06 апреля 2010

Вы не можете объявить массив целых чисел, размер которого известен только во время выполнения в стеке.Однако вы можете объявить такой массив в куче:

int *random_array = new int[random_numbers];

Не забудьте добавить delete [] random_array; в конце main () (и delete random_generator; тоже), чтобы освободить выделенную вами памятьиспользуя new.Эта память автоматически освобождается при выходе из вашей программы, но в любом случае рекомендуется освободить ее (если ваша программа когда-либо будет расти, ее легко забыть добавить позже).

Кроме того, ваш код выглядитхорошо.

0 голосов
/ 06 апреля 2010

Нет необходимости повторять цикл дважды или сохранять массив или вектор.

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();
0 голосов
/ 06 апреля 2010

Если я просто введу ваш класс 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. На какой версии и платформе вы работаете? Можете ли вы предоставить полный источник?

...