2010-04-06 6 views
2

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

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

Просто взгляд показывает, что этот код не будет скомпилирован - массив «random_array» объявлен с непостоянной переменной для своей длины. Вы должны опубликовать свой фактический код, я подозреваю, что вы упростили –

+0

@Terry: это нестандартное расширение. – Potatoswatter

+0

@ Potatocorn: Действительно? Боже мой, на какой платформе? – Cameron

ответ

4

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

int *random_array = new int[random_numbers]; 

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

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

+0

спасибо ... да, вы правы. – user69514

+0

Могу я предложить вместо этого std :: vector? :) –

+1

-1, извините. Используйте 'std :: vector', нет никаких оснований делать это вручную. – GManNickG

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

+0

'int random_array [random_numbers];' Нединамический массив непостоянного размера? – GManNickG

+0

@GMan: * on GCC *. – Potatoswatter

+0

Эх, честный, но я не вижу указаний, что ОР хочет программировать нестандартный C++. – GManNickG

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(); 
+0

Иногда полезно держать ошибку и изучать ее, а не раздавить ее, если ее поведение действительно необъяснимо. – Potatoswatter