Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Константа BUFSIZ - стандартный размер в байтах буфера для обмена данными с файлом

В языке C++ (и в С тоже) не предусмотрены какие-либо возможности для организации ввода-вывода. Весь ввод-вывод перенесен в специальные библиотеки. Это позволило добиться эффекта “независимости от платформы”. Иначе говоря, получить аппаратно независимый язык разработки программ для различных платформ.

В чем недостаток этой функции???????? Как исправить???

В чем недостаток этой функции???????? Как исправить???

Ввод-вывод блоками используется бинарными потоками.

Блочный ввод-вывод Блоком называется область оперативной памяти, содержимое которой записывается в байтах

Else

Do

Else

Считывает до первого пробела либо конца строки

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

{ int k;

char str[80];

out = fopen(filename, "w");

scanf("%s",str);

while(!feof(stdin))

{

fprintf(out,"%s\n",str);

scanf("%s",str);

}

fclose(out);

}

 

void ReadFStringFile(FILE *in, char* filename)

{

char *str=(char*)malloc (80);

if ((in = fopen(filename, "r"))!= NULL)

{

fscanf(in,"%s",str);

if (feof(in))

printf("Файл пустой\n");

{

{

printf("%s\n",str);

fscanf(in,"%s",str);

}

while (!feof(in));

}

fclose(in);

}

printf (" Файл не открывается\n");

}

Запись блоков в файл:
size_t fwrite (const void* ptr, size_t size, size_t nitems, FILE* stream);

где ptr указывает на блок памяти, который записывается в файл;
длина блока указывается как size*nitems
(здесь ‘*’ знак умножения)
. Функция возвращает число записанных единиц. В случае удачи это число должно быть равно nitems.

Чтение:
size_t fread(void* ptr, size_t size, size_t nitems, FILE* stream);
Параметры имеют то же смысл, что и в fwrite.

Пример 18.4. Создание бинарного файла
void CreateBinFile (void)
{struct emp
{ int code;
char name[20];
}
FILE* out;
struct emp s;
if(!(out=fopen("z.bin","wb")))
{ printf("Open file failed.\n");
return;

}

printf("Input code,name.\n");
printf("Press Ctrl+z to exit.\n");
printf("1. ");
int i=2;
scanf("%d%s",&s.code,&s.name);

while (!feof(stdin))
{ fwrite(&s,sizeof(struct emp), 1, out);
printf("%d. ",i);
i++;
scanf("%d%s“,&s.code, &s.name);
}
fclose(out);

}

Пример 18.5. Чтение бинарного файла

void ReadBinFile(void)
struct emp
{ int code;
char name[20];
};
FILE* in;
struct emp s;
unsigned i;

if(!(in = fopen("z.bin", "rb")))
{ printf("Open file failed.\n");
return;

}
fread(&s, sizeof(struct emp),1, in);
do
{ printf("\tcode = %d name = %s\n", s.code, s.name);
fread(&s, sizeof(struct emp), 1, in); }
while (!feof(in));
fclose(in);}

Для сравнения:

С++ Паскаль
fread(&p1,sizeof p1,1,f1); while (!feof(f1)) { //обработать запись файла fread(&p1,sizeof p1,1,f1); } while not eof(f1) do begin read(f1, p1); // обработать запись файла end;
Или: while (fread(&p1,1, sizeof p1,f1)==sizeof p1) { //обработать запись файла }  

В программах на языке С++ можно равноправно использовать две библиотеки ввода-вывода: стандартную библиотеку функций языка С (стандарт ANSI С) и библиотеку классов, специально созданную для языка С++. Эти библиотеки используют два принципиально различных механизма для организации ввода-вывода:

первый основан на концепции файлов; второй работает со специальными классами, ориентированными на ввод-вывод – потоковыми классами.

Работа с библиотекой

Чтобы получить доступ к функциям библиотеки, приложение должно подключить файл stdio.h. Этот файл содержит объявления констант, типов данных и структур, используемых этими функциями, а также прототипы самих функций и описания служебных макросов.

Многие константы, содержащиеся в файле stdio.h, находят достаточно широкое применение в приложениях:

константа EOF возвращается функциями ввода при достижении конца файла, (обычно=-1);

константа NULL служит нулевым ("пустым") указателем;

FILE -имя типа структуры стандартного файлового ввода-вывода;

<== предыдущая лекция | следующая лекция ==>
Создание текстового файла по одному символу | Позиционирования файлов. Максимальная длина имени файла описывается переменной FILENAME_MAX (для Windows - 260)
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 442; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.