Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
364.88 Кб
Скачать

Функции fprintf() и fscanf().

Функции fprintf() и fscanf() полностью аналогичны функциям printf() и scanf(), но используются для форматированного ввода-вывода при работе с файлами. Дополнительный параметр stream идентифицирует сессию работы с файлом (об этом ниже):

int fprintf (FILE* stream, const char* FormatString, [arg1, arg2,]…);

int fscanf(FILE* stream, const char* FormatString, [void* arg1, void* arg2,]…);

Функции неформатированного ввода-вывода.

char *gets( char *buffer );

Ввод строки с клавиатуры. Вводимая строка должна заканчиаться символом перевода строки (нажатием клавиши Enter), который функция gets() заменяет на терминирующий ноль.

int getch( void );

Ввод 1 символа с клавиатуры. Функция ожидает нажатие любой клавиши и возвращает ASCII-код введённого символа. Если была нажата спецклавиша (функциональная клавиша, стрелка и т.п.), то getch вернёт 0, это означает, что нужно ещё раз вызвать эту функцию для получения кода, описывающего нажатую клавишу.

int getchar( void );

Эквивалент getch()

int puts( const char *string );

Вывод строки на экран.

int putch( int c );

Вывод символа на экран.

int putchar( int c );

Эквивалент putch().

char *fgets( char *string, int n, FILE *stream );

Аналогично gets(), но работает с файлами.

int getc( FILE *stream );

Аналогично getch(), но работает с файлами.

int fgetc( FILE *stream );

Эквивалент getc();

int fputs( const char *string, FILE *stream );

Аналогично puts(), но работает с файлами.

int putc( int c, FILE *stream );

Аналогично putch(), но работает с файлами.

int fputc( int c, FILE *stream );

Эквивалент putc();

Все вышеперечисленные функции объявлены в stdio.h, за исключением getch() и putch(), описанных в conio.h.

  1. Представление строковых данных в C. Функции работы со строками.

Работа со строковыми данными (стрингами). Представление строковых данных в языке c.

В отличие от других языков (Pascal, Basic), в C специального типа данных для работы со строками нет. Все строковые данные представляются в виде массива символов, оканчивающегося символом с кодом 0 (терминирующим нулём). Например, строка “C Language” хранится в памяти в виде:

'С'

' '

'L'

'a'

'n'

'g'

'u'

'a'

'g'

'e'

0

При этом ответственность за выделение памяти и её освобождение (в случае динамического выделения) для работы со строками полностью ложится на пользователя.

Исключение составляет случай выделения памяти под строковый литерал (константу) – в этом случае память под него выделяется статически, автоматически во время компиляции. Сам же литерал трактуется языком как константный массив элементов типа char. С ним можно оперировать как с обычным константным массивом.

Например:

void main()

{

char* p;

char c;

p="ABCD"; // Теперь указатель p указывает

// на начало массива символов

с="EFGH"[1]; // Такое тоже возможно –

// это же константный массив.

}

В результате этой программы указатель p станет указывать на область из 5 байт, где хранится строковый литерал, а в переменную c запишется 1й символ (индексация идёт с нуля) , т.е. 'F'.

Тем не менее, работать напрямую с областью памяти, выделенной по строковые литералы, считается очень плохим стилем, т.к. компилятор автоматически освобождает выделенную под литерал память и возможна ситуация, в которой программа будет обращаться к уже освобождённой памяти.

Поэтому все рабочие строковые данные необходимо хранить в специально выделенной для этого памяти, например в статических массивах. При этом размер массива обычно берут с запасом, чтобы в него могла убраться самая длинная строка. Если же заранее размер строк неизвестен, то память можно выделить динамически.

Пример:

main()

{

char ac[255]; // Массив для промежуточных строковых данных

char ac2[]="TempString"; // Проинициализированный массив

// символов.

ac[3]='A';

ac[2]='B';

ac[1]=ac2[1];

}