Чтение из файла в массив в c - PullRequest
1 голос
/ 29 мая 2010

Мой файл содержит последовательность чисел (целое число, число с плавающей точкой, целое число, число с плавающей точкой ....), каждое из которых записано в отдельной строке. Количество столбцов отличается от одной строки к другой, т.е.

1 2,45 3 1,75

5 3,45 7 2,55 9 3,25

6 1,75 4 3,55 6 2,55 9 2,45

Программа должна прочитать содержимое всего файла и поместить данные в массив типа float с записью для каждой строки. Вот мое основное решение, но оно подходит, только если я не исправил ни одного столбца.

float Read(FILE *pFile)
{
 char line[50]; char letter[5];
 fi = fopen("file.txt", "r");

 while (fgets(line,200,fi)!=NULL)
 {

    sscanf(line,"%f %f %f",&a[i], &a2[i],&a3[i]);
     printf("%2.0f %2.5f %2.0f\n",a[i],a2[i],a3[i]);
}

fclose(fi);
return a[i];
}

Пожалуйста, ПОМОГИТЕ.

Ответы [ 2 ]

1 голос
/ 29 мая 2010

Используйте что-то вроде этого. И если вы хотите код повторного входа, см. man strtok_r

#define MAX_BUFFER 200

float Read(FILE* pFile)
{
    char line[MAX_BUFFER];

    while(fgets(line, MAX_BUFFER, pFile) != NULL)
    {
        char* ptr = strtok(line, " ");

        while(ptr != NULL)
        {
            printf("2.5f ", (float)atof(ptr));
            ptr = strtok(NULL, " ");
        }

        printf("\n");
    }
}

Обратите внимание, что вы написали строку [50], но прочитали 200 в fgets (), то есть потенциальное переполнение буфера. 'i' даже не объявлено, а pFile никогда не используется.

0 голосов
/ 29 мая 2010

Поиск Стрток и токенизация.

Убедитесь, что вы думаете о нескольких вещах, таких как определение длины нужного вам массива (управление памятью), отслеживание места в массиве и т. Д.

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