Чтение текстового файла и запись значений в массив с использованием функции - PullRequest
0 голосов
/ 15 декабря 2018

это мой первый вопрос здесь, я все еще на стадии изучения C и только начинаю что-то писать.

Я пишу программу, которая считывает данные из текстового файла (.txt), файл содержит только цифры (например, 10763.60) по одному числу в строке.Сначала я написал пару строк, чтобы вычислить количество строк в файле.Затем я пишу код для чтения содержимого и сохранения его в массив.Ниже приведен код.

FILE *myFile;
myFile = fopen(filename, "r");

//read file into array
float numberArray[count];
int i;

if (myFile == NULL){
    printf("Error Reading File\n");
    exit (0);
}
for (i = 0; i < count; i++){
    fscanf(myFile, "%f,", &numberArray[i] );
}

fclose(myFile);

Теперь я пытаюсь преобразовать его в определяемую пользователем функцию, чтобы я мог использовать ее в разных местах своего кода.для этого я попытался выполнить следующее.

int *datavalue(int count)
{

    float *numberArray = malloc(sizeof(float)*count);

    FILE *myFile;
    char filename[MAX_FILE_NAME];
    printf("\nEnter file name or full path: ");
    scanf("%s", filename);
    myFile = fopen(filename, "r");

    //read file into array

    int i;

    if (myFile == NULL)
    {
        printf("Error Reading File\n");
        exit (0);
    }
    for (i = 0; i < count; i++)
    {
        fscanf(myFile, "%f,", &numberArray[i] );
        printf("\nThe value is %0.2f",numberArray[i]);
    }

    fclose(myFile);
    return numberArray;
}

Но я не могу выполнить задачу.Как я могу это сделать?

1 Ответ

0 голосов
/ 15 декабря 2018

незначительные ошибки, 1) поскольку вы работаете с плавающей точкой, но выделяете память для int 2) перезапускаете указатель с плавающей точкой, но вы объявили datavalue (int count) как возвращающее int

Я изменилПрограмма ниже программы работает должным образом, проверьте и исправьте ее согласно приведенной ниже программе.

#include<stdio.h>
#include<stdlib.h>
#define MAX_FILE_NAME 80

float  *datavalue(int count) {

   float *numberArray = malloc(sizeof(float)*count);

   FILE *myFile;
   char filename[MAX_FILE_NAME];
   printf("\nEnter file name or full path: ");
   scanf("%s", filename);
   myFile = fopen(filename, "r");

   //read file into array

   int i;

  if (myFile == NULL) {
      printf("Error Reading File\n");
      exit (0);
  }

  for (i = 0; i < count; i++)
  {
      fscanf(myFile, "%f,", &numberArray[i] );
      printf("The value is %0.2f\n",numberArray[i]);
 }

 fclose(myFile);
 return numberArray;

}

// основная программа выглядит следующим образом

 int main()
 {
   int i = 0;
   float *array=NULL;

   array = datavalue(5);
   for(i = 0; i< 5; i++) {
    printf("%f\n", array[i]);
   }

   return 0;

}

Я вижу вывод с указанной выше программой The value is 12.50 The value is 14.50 The value is 16.50 The value is 18.60 The value is 6.70 12.500000 14.500000 16.500000 18.600000 6.700000

мой тестовый файл содержит 12.5 14.5 16.5 18.6 6.7 8.9 12.20

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...