у меня действительно большой массив чисел с двойной точностью... я пытался записать его в файл, используя fprintf()... мне нужно записать эти числа по одному в каждой строке, поэтому я сделал что-то вроде этого.
if((fp2 = fopen("temp", "w")) == NULL) { perror("File cannot be opened"); exit(1); }
for(int k = 0; k < j; k++ )
{
fprintf(fp2, "%0.3lf\n", diff[k]);
}
Однако есть проблема, что он записывает данные до определенного количества строк, после чего я выдаю все нули. Например
3.040
0.700
-2.740
0.000
0.000
0.000
0.000
0.000
0.000
вообще не могу понять в чем может быть проблема. почему он записывает все значения как 0,000, когда в массиве есть значения.
вот как был реализован diff, если это поможет.
diff = (double *)malloc(fileSize);
diff[0] = data[0];
for(j = 1; j < n; j++ )
{
diff[j] = data[j] - data[j-1];
}
значения из файла были сохранены в data[]. Затем я вычислил разницу между соседними значениями в data[] в diff[] и записал ее обратно в другой файл. fileSize — это размер исходного файла. и я точно знаю, что все значения в diff[] заполнены правильно.
fprintf()
и действительно проверяли содержимое этого массива? - person viraptor   schedule 07.12.2009diff
? А также можете ли вы показать нам источник, гдеj
присвоено значение? - person PP.   schedule 07.12.2009%lf
— это расширение компилятора. Мы не знаем, какой у вас компилятор и какие расширения он предоставляет. Если вы можете написать свой код, не полагаясь на расширения, тем лучше. - person pmg   schedule 07.12.2009diff
, спасибо. Итак, что такоеfileSize
и связано ли оно сn
? Обратите внимание, что когда выmalloc(fileSize)
вы выделяетеfileSize
БАЙТОВ в памяти. Каждый двойной занимает 8 байт (более или менее в зависимости от платформы), поэтому в вашем массиве будетfileSize / 8
элементов. Вы УВЕРЕНЫ, чтоn
никогда не превышает количество элементов в вашем массиве? - person PP.   schedule 07.12.2009