Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Работа со структурами


Автор: Musja 2.5.2006, 20:37
Всем привет!
Совсем запуталась и не могу понять как сделать  smile 
подскажите кому не жалко, пожалуйста...

-------------------------------------------------------
cЧитая данные из файла и используя массив структур решить следующую задачу. Файл содержит информацию вида : 

Номер телефона    Дата разговора   Продолжительность  Код города

Разработать программу корректировки отдельных элементов файла и вывода информации по запросу. 
 

Автор: adonin 3.5.2006, 09:43
Musja, Приветствуем на форуме такую симпатичную девушку smile 
Цитата(Musja @  2.5.2006,  20:37 Найти цитируемый пост)
Разработать программу корректировки отдельных элементов файла и вывода информации по запросу

Запрос в каком виде должен быть? не уж то SQL? Или предварительно нужно предусмотреть несколько типов запросов? 

Автор: bsa 3.5.2006, 15:14
Musja, приведи пример работы программы (файл на входе, запрос, результат). А то условие очень расплывчатое. И не понятно, в каком 

формате дата. Да и язык программирования узнать бы не помешало бы (C или C++).
Кстати, в любом случае программа простейшая.
Данный пример загружает записи и выводит их на экран. Записи должны быть в файле file.txt. Пример:
Код

1234567 01.02.2006 00:02:43 495

Код

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct record {
    unsigned long phone;
    struct {
          int day;
          int mon;
          int year;
    } date;
    struct {
          int hour;
          int min;
          int sec;
    } duration;
    unsigned    town;
};

int read_file(FILE * f, struct record ** records) {
    int n = 0;
    struct record * cur;
    while( !feof(f) ) {
         ++n;
         *records = (struct record *)realloc( *records, n * sizeof(**records) );
         cur = *records + n - 1;
         fscanf(f, "%lu %d.%d.%d %d:%d:%d %u",
                           &cur->phone, 
                           &cur->date.day, &cur->date.mon, &cur->date.year,
                           &cur->duration.hour, &cur->duration.min, &cur->duration.sec,
                           &cur->town);
    }
    return n;
}

int main() {
    struct record * records = NULL, *cur;
    int i, n;
    FILE *f;
/* Открываем текстовый файл для чтения */
    f = fopen( "file.txt", "rt" );
    if ( !f ) {
        perror("Unable to open file");
        return 1;
    }
/*Загружаем записи*/
    n = read_file(f, &records);
/* Закрываем файл */
    fclose(f);
/* Печатаем общее количество записей */
    printf("Total records %d:\n", n );
/* Выводим их все на экран */
    for( i = 0, cur = records; i < n; ++i, ++cur ) {
        printf("%lu\t%02d.%02d.%02d\t%02d:%02d:%02d\t%03u\n",
            cur->phone,
            cur->date.day, cur->date.mon, cur->date.year,
            cur->duration.hour, cur->duration.min, cur->duration.sec,
            cur->town);
    }
/* Освобождаем память */
    free(records);
/* Успешное завершение программы */
    return 0;
}

  

Автор: MAKCim 4.5.2006, 07:14
Код

void read_s(const char* path, date_t* strc)
{
    FILE* fs=fopen(path,"r");
    if (!fs) return;
    unsigned int bytes=1
    while (bytes)
    {
        bytes=fread(strc,sizeof(date_t),1,fs);
        ++strc;
    }
    close(fs);
}

буфер strc должен быть достаточен для хранения всех записей 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)