311 / 271 / 118
Регистрация: 05.06.2013
Сообщений: 868
1

Считывание строк из файла и запись в структуру

07.06.2019, 18:45. Показов 3178. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некая структура и массив таких структур x.
C
1
2
3
4
5
6
7
struct cyberforum
{
    int a;
    char b[20];
    float c;
    char d[20];
} *x;
Пытаюсь считывать данные из файла такого вот вида:
Код
1: q.w.e1, 1000.0, asd1
2: q.w.e2, 2000.0, asd2
3: q.w.e3, 3000.0, asd3
И записать их в динамический массив структур.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
        int N = 0;
        f = fopen(filename, "r");
        while (!feof(f))
        {
            if (N == 0)
                x = (struct cyberforum *)malloc(sizeof(struct cyberforum));
            else
                x = (struct cyberforum *)realloc(x, (N + 1) * sizeof(struct cyberforum));
 
            fscanf(f, "%d: %s, %f, %s\n", &x[N].a, x[N].b, &x[N].c, x[N].d);
            N++;
        }
        fclose(f);
Помогите понять почему:
1. Цикл while выполняется бесконечно. Например в файле всего 3 строки, а он выполняется постоянно.
2. Не все переменные нормально считываются, например при первом прогоне первые 3 переменные вроде бы хорошо считались, но 4я и все остальные выполнения уже возвращают некорректные значения.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2019, 18:45
Ответы с готовыми решениями:

Считывание из файла строк с разделителями, записывание в структуру
Здравствуйте, необходимо считать данные из файла и записать в массив струтктур. Строки в файле...

Считывание и запись в массив строк из файла
Есть файл-конфигурация, в котором на каждой новой строке стоит сначала число, а потом через пробел...

Считывание строк с файла и запись в переменную
Приветствую у меня приключилась такая проблема : Как можно реализовать считывания строк с файла и...

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

2
296 / 227 / 102
Регистрация: 11.08.2016
Сообщений: 780
07.06.2019, 20:47 2
Jefe, выполняется постоянно потому, что fscanf не сдвигает указатель файла, в отличие от fgetc, допустим. А feof как раз проверяет, достигнут ли конец или нет
1
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
07.06.2019, 20:54 3
Лучший ответ Сообщение было отмечено Jefe как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<stdio.h>
#include<stdlib.h>
 
struct cyberforum {
    int a;
    char b[20];
    float c;
    char d[20];
} *x;
 
int main(int argc, char *argv[])
{
 
    int N = 0;
    char filename[] = "text.txt";
    FILE *f = NULL;
    f = fopen(filename, "r");
    while (!feof(f))
    {
        x = (struct cyberforum *)realloc(x, (N + 1) * sizeof(struct cyberforum));
        fscanf(f, "%d%*c %19[^,]s", &x[N].a, x[N].b);
        fscanf(f, "%*c%f %*c%19s", &x[N].c, x[N].d);
        N++;
    }
    fclose(f);
 
    for(int i=0; i<N; i++){
        printf("%d: %s, %.1f, %s\n", x[i].a, x[i].b, x[i].c, x[i].d);
    }
    return 0;
}
Учи матчасть

Добавлено через 3 минуты
fscanf не сдвигает файловый указатель, если он неправильно сработал, например, ожидается целое число, а пришла строка. Если ввод осуществлён валидно, то fscanf сдвинет указатель.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2019, 20:54
Помогаю со студенческими работами здесь

Считывание строк из файла и запись в массив
Добрый день, уважаемые форумчане! Помогите пожалуйста в Qt осуществить считывание известного...

Считывание строк из файла и запись в разные векторы
Как считать строки допустим есть 2 строки в файле input.txt Cat mouse dog House...

Считывание из файла в структуру
Добрый день, столкнулся с такой проблемой. Есть файл со строками из 1 и 0 Пример: 1111110...

Считывание из файла в структуру
структура вида название_фильма,стоимость,режиссер.Данные в файле.Как считать название фильма...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru