Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2012, 22:19   #1
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
Сообщение Вывод поля структурной переменной

Здраствуйте.

Как прочитать и вывести из файла одно поле структурной переменной?(информация записана в файл в виде структур)

Объясните на этом примере
Код:
struct s
{
 char *name;
 int year;
};


int main()
{ 
 s *s=(s*)calloc(1,sizeof(s));
 FILE *f;
 f=fopen("file.bin","a+b");
 scanf("%d",&s.year);
 scanf("%s",*s.name);
 fprintf(f,"%d",s.year);
 fprintf(f,"%s",s.name);
}
Представим, что таких структурных переменных в файле много (ответ "Cчитай первую/вторую строку" не подойдёт )
Например, как считать поле name в 10-м структурном блоке в файле?

P.S. Если такое возможно, то без использования fseek();

Заранее спасибо

Последний раз редактировалось Stilet; 27.05.2012 в 22:25.
Blind Guard вне форума Ответить с цитированием
Старый 27.05.2012, 23:22   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
char *name;
Указатель на символ. Нужно отдельно память выделить. Либо буфер определить: char name[BSIZE]

При открытие файла нужно проверять есть ли он (удачно ли открытие):
Код:
FILE *f;
char* filename = "file.txt";

f = fopen(filename,"r");
if (f == NULL) {
    fprintf(stderr, "error: cannot open file \"%s\"\n", filename);
    return 1;
}
И нужно освобождать файловый указатель:
Код:
fclose(f);
Можете не читать, а пропустить заданное количество записей. Используйте fscanf для чтения из файла c строкой формата "%*s" чтобы не считывать, а пропустить заданное количество слов (или записей) в цикле.

Последний раз редактировалось 8Observer8; 27.05.2012 в 23:24.
8Observer8 вне форума Ответить с цитированием
Старый 28.05.2012, 00:24   #3
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Всё это у меня есть, просто слишком краткий и недописанный пример привёл В целом спасибо, только вот не могли бы вы подробней про "%*s" рассказать, впервые с таким сталкиваюсь.
Blind Guard вне форума Ответить с цитированием
Старый 28.05.2012, 09:35   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

К примеру, у вас в файле хранится строка:

infile.txt
Цитата:
Number of workers: 15
И вам нет необходимости считывать два первых слова. А нужно считать последнее число в строке.

Код:
#include <stdio.h>

int main()
{ 
    int n;
    FILE *fp;
    char* filename = "infile.txt";

    // проверяем удачно ли открытие файла
    fp = fopen(filename,"r");
    if (fp == NULL) {
        fprintf(stderr, "error: cannot open file \"%s\"\n", filename);
        return 1;
    }

    // считываем число рабочих
    fscanf(fp, "%*s%*s%*s%d", &n);

    fclose(fp);
    return 0;
}
Лучше в цикле пропустить ненужное количество слов:
Код:
#include <stdio.h>

int main()
{ 
    int n, i;
    FILE *fp;
    char* filename = "infile.txt";

    // проверяем удачно ли открытие файла
    fp = fopen(filename,"r");
    if (fp == NULL) {
        fprintf(stderr, "error: cannot open file \"%s\"\n", filename);
        return 1;
    }

    // пропускаем ненужные нам слова
    for (i = 0; i < 3; i++) {
        fscanf(fp,"%*s");
    }

    // считываем число рабочих
    fscanf(fp, "%d", &n);

    fclose(fp);
    return 0;
}
P.S. Можно считать "первую запись, вторую и т.д.". Но если использовать "%*s", то программа должна работать быстрее, ведь копирования в этом случае не происходит.

Последний раз редактировалось 8Observer8; 28.05.2012 в 11:09.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение переменной и значение поля таблицы. Solvinder Помощь студентам 0 16.01.2011 15:00
проблемы со структурной схемой БД FiLLinG Фриланс 1 30.12.2010 01:43
присвоить переменной значение поля в последней записи таблицы KaimNotark БД в Delphi 1 03.02.2010 07:21
Как переменной присвоить данные из текстового поля формы? kitten2 Microsoft Office Excel 2 08.04.2009 05:43