Я делаю программу, которая считывает два набора данных (float) из двух разных TXT-файлов, а затем передает эти данные в два разных массива, которые будут использоваться в дальнейших расчетах. Однако, когда я пытаюсь использовать динамическое распределение более одного раза, что-то идет не так, и данные, похоже, не сохраняются в массиве.Как использовать более одного динамического распределения для программирования на C?
Следующая упрощенная программа, кажется, работает нормально:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
float *VarA;
int n = 0;
int *counter;
int i;
FILE *input1;
input1 = fopen("C:\\Users\\...test.txt","r");
VarA = (float*)calloc(20001, sizeof(float));
for(i = 0; i < 20001; i++)
{
fscanf(input1,"%f",&VarA[i]);
printf("%f\n",VarA[i]);
}
free(VarA);
fclose(input1);
return 0;
}
успешно показывает данные, хранящиеся в массиве Vara. Однако, если я ввожу новый массив, чтобы подсчитать количество строк в файле (который необходим для моих дальнейших расчетов), я просто получить значение 0,000000 из каждого элемента массива:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
float *VarA;
int n = 0;
int *counter;
int i;
FILE *input1;
input1 = fopen("C:\\Users\\...test.txt","r");
counter = (int*)calloc(100000, sizeof(int));
while(fscanf(input1,"%f",&counter[n]) != EOF)
{
n++;
}
free(counter);
printf("n = %i\n", n);
VarA = (float*)calloc(n, sizeof(float));
for(i = 0; i < n; i++)
{
fscanf(input1,"%f",&VarA[i]);
printf("%f\n",VarA[i]);
}
free(VarA);
fclose(input1);
return 0;
}
Я знаю, что я могу избегайте использования другого массива для подсчета количества строк. Дело в том, что каждый раз, когда я использую другой массив, для любых целей я получаю тот же результат. Например, если я не использую массив для подсчета количества строк, но я делаю еще один для хранения моего другого набора данных, один из этих массивов просто не представит данные после чтения. Я пытался несколько раз модифицировать свою программу, чтобы найти источник такого поведения, но безуспешно.
'while (fscanf (input1,"% f ", & counter [n])! = EOF)' - вы указываете '% f' при чтении в' int'. Это может привести не только к сохранению неправильного значения, но и к неопределенному поведению в некоторых случаях. – yeputons
Возможный дубликат [Сброс указателя на начало файла] (http://stackoverflow.com/questions/32366665/resetting-pointer-to-the-start-of-file) –
Обратите внимание, что нет необходимости в первом ' calloc() ', поскольку вы можете просто читать в фиктивную переменную и не показывать результат. –