Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
odin.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
81.56 Кб
Скачать

Билет 17. Функции текстового преобразования sscanf и sprintf

Стандартная библиотека ввода-вывода Си предоставляет также две замечательные функции sscanf и sprintf ввода и вывода не в файл или поток, а в строку символов (т.е. массив байтов), расположенную в памяти компьютера. Мнемоника названий функций следующая: в названии функции fscanf первая буква f означает файл (file), т.е. ввод производится из файла; соответственно, в названии функции sscanf первая буква s означает строку (string), т.е. ввод производится из текстовой строки. (Последняя буква f в названиях этих функций означает форматный). Первым аргументом функций sscanf и sprintf является строка (т.е. массив символов, ограниченный нулевым байтом), из которой производится ввод или в которую производится вывод. Эта строка как бы стоит на месте файла в функциях fscanf и fprintf.

Функции sscanf и sprintf удобны для преобразования данных из текстового представления во внутреннее и обратно. Например, в результате выполнения фрагмента

char txt[256] = "-135.76"; double x;

sscanf(txt, "%lf", &x);

текстовая запись вещественного числа, содержащаяся в строке txt, преобразуется во внутреннее представление вещественного числа, результат записывается в переменную x. Обратно, при выполнения фрагмента

char txt[256]; int x = 12345;

sprintf(txt, "%d", x);

значение целочисленной переменной x будет преобразовано в текстовую форму и записано в строку txt, в результате строка будет содержать текст " 12345 ", ограниченный нулевым байтом.

Для преобразования данных из текстового представления во внутреннее в стандартной библиотеке Си имеются также функции atoi иatof с прототипами

int atoi(const char *txt); // текст => int

double atof(const char *txt); // текст => double

Функция atoi преобразует текстовое представление целого числа типа int во внутреннее. Соответственно, функция atofпреобразует текстовое представление вещественного числа типа double. Мнемоника имен следующая:

  • atoi означает "character to integer";

  • atof означает "character to float".

(В последнем случае float следует понимать как плавающее, т.е. вещественное, число, имеющее тип double, а вовсе не float! Типfloat является атавизмом и практически не используется.)

Прототипы функций atoi и atof описаны в стандартном заголовочном файле " stdlib.h ", а не "stdio.h", поэтому при их использовании надо подключать этот файл:

#include <stdlib.h>

(вообще-то, это можно делать всегда, поскольку "stdlib.h" содержит описания многих полезных функций, например, функции завершения программы exit, генератора случайных чисел rand и др.).

Отметим, что аналогов функции sprintf для обратного преобразования из внутреннего в текстовое представление в стандартной библиотеке Си нет. Компилятор Си фирмы Borland предоставляет функции itoa и ftoa, однако, эти функции не входят в стандарт и другими компиляторами не поддерживаются, поэтому пользоваться ими не следует.

Билет 18. Аргументы функции main.

main(int ARGC,char **ARGV)

{

while (ARGC--)

printf("\n %s ",ARGV[ARGC]);

}

Допустим, программа называется

obrab_1.exe

Тогда, если ее вызвать из подкаталога TC на диске C следующим образом:

C:\TC>obrab_1 one two

то программа выдаст на экран такую информацию:

two

one

C:\TC\obrab_1.exe

В языке C заданы два встроенных аргумента функции main: argc и argv.

Выглядит это так:

int main(int argc, char *argv[]) {...}

Аргумент argc типа integer содержит в себе количество аргументов командной строки.

Аргумент argv типа char - указатель на массив строк. Каждый элемент массива указывает на аргументы командной строки. Один параметр отделяется от другого пробелами.

argv[0] - полное имя запущенной программы

argv[1] - первая строка записаная после имени программы

argv[2] - вторая строка записаная после имени программы

argv[argc-1] - последняя строка записаная после имени программы

argv[argc] – NULL

Билет 19. Файлы, их описание, открытие\закрытие текстового файла.

Пример открытия файла

File *in;

if((in=fopen("myfile.dat","r"))==NULL)

{ printf("\n Файл myfile.dat не открыт."); exit(1);}

Закрытие файла осуществляет функция

fclose(указатель_файла);

Работа со стандартным файлом:

scanf ( управляющая строка, данные );

printf (управляющая строка,данные);

gets ( имя_строки );

puts( строка или имя строки );

getchar();

getch();

getche();

putchar( символ или имя_символа )

Работа с произвольным файлом:

fscanf(указатель_файла,управляющая_строка, данные);

fprintf(указатель файла,управляющая строка, данные);

fgets ( имя_строки,колич.симв.,указ._файла );

fputs ( строка или имя_строки,указ._файла );

getc ( указатель_файла) ;

putc( символ или имя_символа,указ._файла);

Билет 20. Файл, их описание, открытие\закрытие двоичного файла.

В отличие от текстовых файлов доступ к элементам бинарных файлов выполняется в произвольном порядке, а не последовательно. Поэтому бинарные файлы называют файлами произвольного доступа. Приложение, в котором предполагается использовать файлы произвольного доступа, должно их создавать. Все записи в таком файле должны быть одинаковой фиксированной длины. Данные могут быть вставлены в файл прямого доступа без разрушения других данных, изменены или удалены без перезаписи всего файла. Для получения доступа к бинарному файлу(потоку) в MVS нужно: Создать поток соответствующего типа: ifstream- для ввода из файла ; ofstream- для вывода в файл; fstream - для обмена с файлом в двух направлениях. Связать его с файлом данных и открыть (open) для работы в определенном режиме, с обязательным указанием двоичного режима ios::binary(по умолчанию потоки открываются в текстовом режиме):

Для закрытия потока используется функция close().

Двоичные файлы. Бесформатный ввод-вывод:

fread(куда, размер, сколько, указатель_файла);

– для чтения из файла,

fwrite (откуда, размер, сколько,указатель_файла);

– для записи в файл.

При этом, в fopen

режим дополняется опцией b

(двоичный файл), например,

"wb+"

(по умолчанию действует t

— текстовый файл).

Двоичные файлы. Бесформатный ввод-вывод:

ПРИМЕР:

#include<stdio.h>

main( )

{

FILE *in;

int i,a[10]={1,2,3,4,5,6,7,8,9,10},b[10];

in=fopen("D:\\ISTAS\\myfile.dat","wb+");

fwrite(a,2,10,in);

rewind(in);

fread (b,2,10,in); puts ("\nМассивB\n");

for (i=0;i<10;i++)

printf (" %d",b[i]);

}

Указание позиции при работе с файлом:

ftell (указатель файла);

fseek( указатель_файла, величина_сдвига, точка_отсчета);

  • SEEK_SET – начало файла,

  • SEEK_CUR – текущая позиция,

  • SEEK_END – конец файла.

Б) Чтение из двоичного файла

FILE *out;

...

in=fopen("VkladBin.dat","rb");

fread(&NC,sizeof(int),1,in);

clients=(struct z*)malloc(NC*sizeof(struct z));

fread(clients,sizeof(struct z),NC,in);

fclose(in);

Билет 21. Чтение из файла, запись в файл. С использованием форматов.

Объявление файла производится следующим образом:

FILE указатель файла1[,..,указатель файлаN];

Например

FILE *in, *out, *f1;

Открытие файла:

указатель_файла=fopen(имя_файла, режим_работы);

Возможны следующие режимы работы:

r – открытие файла на чтение (при этом открываемый файл должен существовать);

w – открытие файла на запись (если открываемого файла нет, то он будет создан; если этот файл уже есть, то его содержимое стирается);

a – открытие файла на дозапись (при этом, если файла нет, то он создается);

r+ – открытие файла на чтение и запись (при этом открываемый файл должен существовать);

w+ – открытие файла на чтение и запись (при этом содержимое открываемого файла стирается);

a+ – открытие файла на чтение и дозапись (при этом, если файла нет, то он создается).

Работа со стандартным файлом:

scanf ( управляющая строка, данные );

printf (управляющая строка,данные);

gets ( имя_строки );

puts( строка или имя строки );

getchar();

getch();

getche();

putchar( символ или имя_символа )

Билет 22. Чтение из файла, запись в файл. Без форматов.

Работа с произвольным файлом:

fscanf(указатель_файла,управляющая_строка, данные);

fprintf(указатель файла,управляющая строка, данные);

fgets ( имя_строки,колич.симв.,указ._файла );

fputs ( строка или имя_строки,указ._файла );

getc ( указатель_файла) ;

putc( символ или имя_символа,указ._файла);

Двоичные файлы. Бесформатный ввод-вывод:

fread(куда, размер, сколько, указатель_файла); – для чтения из файла,

fwrite (откуда, размер, сколько,указатель_файла); – для записи в файл.

При этом, в fopen режим дополняется опцией b(двоичный файл), например,

"wb+" (по умолчанию действует t — текстовый файл).

Двоичные файлы. Бесформатный ввод-вывод:

ПРИМЕР:

#include<stdio.h>

main( )

{

FILE *in;

int i,a[10]={1,2,3,4,5,6,7,8,9,10},b[10];

in=fopen("D:\\ISTAS\\myfile.dat","wb+");

fwrite(a,2,10,in);

rewind(in);

fread (b,2,10,in); puts ("\nМассивB\n");

for (i=0;i<10;i++)

printf (" %d",b[i]);

}

А) Чтение данных из текстового файла и запись в двоичный файл.

FILE *in,*out;

...

in=fopen("Vklad.dat","r");

out=fopen("VkladBin.dat","wb");

fscanf(in,"%d",&NC);

clients=(struct z*)malloc(NC*sizeof(struct z));

for(i=0;i<NC;i++)

fscanf(in,"%s%s%ld%s",clients[i].name,

clients[i].vid, &clients[i].summa,

clients[i].data);

fwrite(&NC,sizeof(int),1,out);

for(i=0;i<NC;i++)

fwrite(clients,sizeof(struct z),NC,out);

/*

или одной командой

fwrite(clients,sizeof(struct z),NC,out);

*/

fclose(in); fclose(out);

Указание позиции при работе с файлом:

ftell (указатель файла);

fseek( указатель_файла, величина_сдвига, точка_отсчета);

  • SEEK_SET – начало файла,

  • SEEK_CUR – текущая позиция,

  • SEEK_END – конец файла.

  • Б) Чтение из двоичного файла

  • FILE *out;

  • ...

  • in=fopen("VkladBin.dat","rb");

  • fread(&NC,sizeof(int),1,in);

  • clients=(struct z*)malloc(NC*sizeof(struct z));

  • fread(clients,sizeof(struct z),NC,in);

  • fclose(in);

Билет 23. Определение текущий позиции в файле, ее установка.

Указание позиции при работе с файлом:

ftell (указатель файла);

fseek( указатель_файла, величина_сдвига, точка_отсчета);

  • SEEK_SET – начало файла,

  • SEEK_CUR – текущая позиция,

  • SEEK_END – конец файла.

  • Билет 24. Чтение из файла после записи и запись после чтения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]