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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2014, 00:37   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Файл структур

Здравствуйте! Продолжаю бежеть вперед паровоза в изучении СИ) есть вопрос с объявлением файла структур, в делфи делается так:

Код:
type
zap=record
names:string[15];
ko:byte;
stoim:real;
end;
var
f:file of zap;
w:zap;
Как написать такую программу на С(с++), вернее объявить такой файл (файловую переменную) и рабочую переменную, как прочитать запись в файл или прочитать из него? Возможно ли его заполнить через scanf? Какие модули подключить))? Есть ли в СИ что-то подобное паскалевскому seek(f,<номер записи в файле>)?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.10.2014, 01:32   #2
abit
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 43
По умолчанию

Цитата:
вернее объявить такой файл (файловую переменную) и рабочую переменную, как прочитать запись в файл или прочитать из него?
правильно это называется "типизированный файл" но в C/C++ с таким не работают, там вместо этого бинарные "сырые" файлы, в Си я не спец, в C++ это выглядит приблизительно так:
Код:
ofstream fout ( "output.int", ios::in | ios::binary );
std::fout<<(char)c<<(byte)b
и т.д. читать аналогично:
Код:
ifstream fin ( "input.int", ios::in | ios::binary );
std::fin>>(char)c>>(byte)b
в случае с С++ подключать <fstream>, в случае Си очевидно тоже можно через pritnf/scanf, но сомневаюсь что вы сможете его заполнить через scanf ))) аналог seek в Си очевидно fseek, в C++ видимо std::istream::seekg и std:: ostream::seekp
abit вне форума Ответить с цитированием
Старый 24.10.2014, 02:19   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

До с++ не дошел пока и ваш код мне не совсем понятен, в гугле нашел что как-то так:

Charest
{
}

Это аналог паскалевского type вроде, а вот << и >>-аналог write(f,w), read(f,w)? Какой метод в си создает файл и открывает его для чтения/записи? Какой метод устанавливает на определенную запись?

З.ы. не ругайте за глупые вопросы)) хочу разобраться с этим, не без вас))
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.10.2014, 03:32   #4
abit
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 43
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
До с++ не дошел пока и ваш код мне не совсем понятен, в гугле нашел что как-то так:

Charest
{
}

Это аналог паскалевского type вроде, а вот << и >>-аналог write(f,w), read(f,w)? Какой метод в си создает файл и открывает его для чтения/записи? Какой метод устанавливает на определенную запись?

З.ы. не ругайте за глупые вопросы)) хочу разобраться с этим, не без вас))
будет тяжело... бросайте Си, беритесь за C++ )
я сейчас прикинул в каких случаях использую в free pascal type, аналога в C++ не вижу... там это так, но по другому))) где typedef, где struct (вместо pascal type ...=record), где class (вместо pascal ...object/class) (хотя открою вам тайну struct и class в С++ взаимозаменяемы, разница только в том, что в struct по умолчанию все поля и методы public, а в class - private), давайте конкретные примеры с pascal type покажу как переводятся в C++, << и >> это не совсем аналоги read/write, это близко, но опять же иначе, там суть в потоках, человек который работал с Linux примет их родными, это по нашему звучит приблизительно так a<<b - "послать b в a", a>>b - "послать из a в b", чтобы вы не думали что это взаимозаменямые операции- учтите, что есть устройства ввода и устройства вывода, допустим послать с клавиатуры в монитор/файл можно, а вот с файла/монитора на клавиатуру нельзя
Цитата:
Какой метод в си создает файл и открывает его для чтения/записи?
в Си методов нет, это не ООП, есть функция - fopen (аналог композиций паскалевского assign+reset/assign+append/assign+rewrite) указываются параметры что именно ты хочешь делать с файлом, но я бы рекомендовал сразу заняться C++, там всё иначе

Последний раз редактировалось abit; 24.10.2014 в 04:19.
abit вне форума Ответить с цитированием
Старый 24.10.2014, 21:40   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

в общем пока тему не буду поднимать, буду ждать лекций с этой темой, позже код выложу, мало ли новичкам пригодится (недели через 2 ) ибо сейчас пока проходим двумерные массивы целого или вещественного типа :D, так что до файлов еще далеко
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.10.2014, 22:15   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

я чот не понял, а чо, сишные функции типа fopen, fclose, fseek, feof, fread, fwrite, fflush, fsetpos и т.п. отменили штоль?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив структур в xml-файл Manstain C/C++ Базы данных 1 04.07.2011 08:39
Чтение/запись структур в файл DR&FG Общие вопросы C/C++ 5 22.01.2011 20:01
Массив структур и файл(С++) WarHamster Помощь студентам 2 01.09.2010 13:22
TFileStream, N структур в один файл? Человек_Борща Общие вопросы Delphi 1 06.06.2010 14:34
Массив структур+файл Роман_какой-то Общие вопросы C/C++ 4 22.03.2010 20:28