Опциональные префиксы для целых чисел 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Опциональные префиксы для целых чисел



Код Значение
h Короткое целое short
l Длинное целое long
ll Дважды длинное целое long long
I32 Тип __int32
I64 Тип __int64

 

 

53. Модификаторы формата

Спецификатор минимума ширины поля

Целое число, помещаемое между знаком % и кодом формата, рассматривается как спецификатор минимума ширины поля.

Пример

#include <stdio.h>

int main(void)

{

double item;

item = 10.12304;

printf(“%f\n”, item);

printf(“%10f\n”, item);

printf(“%012f\n”,item);

return 0;

}

Спецификатор точности

Спецификатор точности состоит из точки, за которой следует целое число.

#include <stdio.h>

int main(void)

{

printf(“%.4f\n”, 123.1234567);

printf(“%3.8d\n”, 1000);

printf(“%10.15s\n”, “This is a simple test”);

return 0;

}

В результате получим

123.1235

This is a simpl

Выровненый вывод

По умолчанию выравнивание по правому краю. Вывод можно выровнять по левому краю, поставив перед символом % знак «минус». Например, спецификатор %-10.2f выравнивает число с двумя знаками после точки по левому краю поля, состоящего из 10 позиций.

Модификаторы * и #

Помещение # перед g, G, f, e или E обеспечивает наличие десятичной точки в случае отсутствия дробной части. Если перед спецификатором o поместить #, то выведенное число будет иметь в начале 0. Если перед спецификаторами формата x или X поставить #, то шестнадцатеричное число будет печататься с префиксом 0x. Нельзя применять # к другим спецификаторам формата.Помимо констант, спецификаторы минимальной ширины поля и точности могут предоставляться аргументами printf(). Для реализации этого следует использовать *.

printf(“%*.*f”, 10, 4, 123.4)

 

 

54. Файловая система ANSI C

Заголовочный файл stdio.h предоставляет прототипы для функций ввода-вывода и определяет три типа: size_t, fpos_t и FILE. Типы size_t и fpos_t – зависят от адресного пространства (обычно unsigned long). stdio.h также определяет несколько макросов. Наиболее значимые NULL, EOF, FOPEN_MAX, SEEK_SET, SEEK_CUR, SEEK_END.

Имя Функция
fopen() fclose() putc() fputc() getc() fgetc() fseek() fprintf() fscanf() feof() ferror() rewind() remove() fflush() Открывает файл Закрывает файл Записывает символ в файл Аналогично putc() Читает символ из файла Аналогично getc() Переходит к указанному байту в файле Делает то же в файл, что и printf() на консоль Делает то же с файлом, что и scanf() c консолью Возвращает истину при достижении конца файла Возвращает истину при обнаружении ошибки Сбрасывает индикатор позиции файла на начало файла Стирает файл Очищает буфер файла

55. Запись и чтение символа

Запись символа

Система ввода-вывода ANSI С определяет две эквивалентные функции, выводящие символ – putc() и fputc(). Поддержка двух идентичных функций необходима для совместимости со старыми версиями С.

Функция putc() используется для записи символов в поток, ранее открытый функцией fopen(). Прототип для putc() следующий:

int putc(int ch, FILE * fp);

где fp – это указатель на файл, возвращённый fopen(), а ch – выводимый символ.

Если putc() выполнена успешно, она возвращает выведенный символ. В противном случае возвращает EOF.

Чтение символа

Имеется две эквивалентные функции для ввода символа – getc() и fgetc(). Функция getc() используется для чтения символа из потока, открытого на чтение с помощью fopen(). Прототип getc() следующий:

int getc(FILE * fp);

где fp – это указатель на файл типа FILE *, возвращенный fopen(). Функция getc() возвращает EOF при достижении конца файла. Для чтения текстового файла до конца следует использовать следующий код:

ch = getc(fp);

while(ch!= EOF) { ch = getc(fp); }

56. fclose()

Функция fclose() используется для закрытия потока, ранее открытого с помощью fopen(). Она сохраняет в файл данные, находящиеся в дисковом буфере, и выполняет операцию системного уровня по закрытию файла.

Функция fclose() имеет прототип:

int fclose(FILE * fp);

где fp – это указатель на файл возвращённый fopen(). Если возвращён 0, то операция закрытия была выполнена успешно, а если EOF, то, значит, была ошибка.

 

 

57. Использование feof()

Когда файл открыт для двоичного ввода, может быть прочитано значение равное EOF. В результате getc() будет отображать состояние конца файла, хотя конец файла не достигнут. Для разрешения этой проблемы в С имеется функция feof().

Её прототип:

int feof(FILE * fp);

где fp – идентифицирует файл. Функция feof() возвращает не 0, если достигнут конец файла, в противном случае она возвращает 0. Следующий код читает двоичный файл, пока не встретится конец файла:

while(!feof(fp)) ch = getc(fp);

Следующая программа копирует файл любого типа. Файлы открываются в двоичном режиме, и feof() используется для проверки наличия конца файла:

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

FILE *in, *out;

char ch, p[1025], p1[1025];

puts("Input filename");

fgets(p,1025,stdin);

if(p[strlen(p)-1] == '\n') p[strlen(p)-1]='\0';

printf("Length of filename now = %lu\n", strlen(p));

puts("Output filename");

fgets(p1,1025,stdin);

if(p1[strlen(p1)-1] =='\n') p1[strlen(p1)-1]='\0';

printf("Length of filename now = %lu\n", strlen(p1));

if((in=fopen(p, "rb")) == NULL) {

printf("Cannot open source file.");

return 1;

}

if((out=fopen(p1, "wb")) == NULL) {

printf("Cannot open destination file.");

return 1;

}

while(!feof(in)) {

ch = getc(in);

if(!feof(in)) putc(ch, out);

}

fclose(in);

fclose(out);

return 0;

}

58. Работа со строками: fgets() и fputs()

Файловая система ввода-вывода С содержит две функции, которые могут читать или писать строки в поток – fgets() и fputs(). Они имеют следующие прототипы:

int fputs(const char * str, FILE * fp);

char *fgets(char * str, int длина, FILE * fp);

Функция fputs() подобна puts(), за исключением того, что она пишет строку в указанный поток. Функция fgets() читает строку из указанного потока, пока не встретится символ новой строки или не будет прочитано (длина- 1) символов. Если прочитан символ новой строки, то он станет частью строки. В обоих случаях результирующая строка завершается нулевым символом. Функция возвращает str в случае успеха и нулевой указатель - в случае ошибки.

Можно использовать fgets() для чтения строки с клавиатуры. Чтобы сделать это, надо использовать stdin как указатель на файл. Например:

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

char s[80];

printf("Enter a string: ");

fgets(s, 80, stdin);

if(s[strlen(s)-1] == '\n') s[strlen(s)-1]='\0';

puts(s);

return 0;

}

59. fread() и fwrite()

Файловая система предоставляет две функции, позволяющие читать и писать блоки данных - fread() и fwrite(). Их прототипы:

size_t fread(void * буфер, size_t число_байт, size_t объём, FILE * fp);

size_t fwrite(const void * буфер, size_t число_байт, size_t объём, FILE * fp);

В случае fread() буфер – это указатель на область памяти, которая получает данные из файла. В случае fwrite() буфер – это указатель на информацию, записываемую в файл. Длина каждого элемента в байтах определяется в число_байт. Аргумент объём определяет, сколько элементов (каждый длиной число_байт) будет прочитано или записано. fp – это указатель на ранее открытый поток.

Функция fread() возвращает число прочитанных элементов. Данное значение может быть меньше, чем объём, если раньше был достигнут конец файла или произошла ошибка. Функция fwrite() возвращает число записанных элементов. Данное значение равно объём, если не возникла ошибка.

 

60. Указатели

1. Указатели предоставляют способ, позволяющий функциям модифицировать передаваемые аргументы.

2. Указатели используются для динамического выделения памяти.

3. Использование указателей может повысить эффективность работы некоторых программ.

4. Указатели, как правило, используются для поддержки некоторых структур данных типа связанных списков и двоичных деревьев.

Указатели – это адреса.

Указатель содержит адрес памяти. Как правило, данный адрес содержит местоположение какой-либо переменной в памяти. Если одна переменная содержит адрес другой, то говорят, что первая переменная указывает на вторую.

Переменные-указатели

Если переменная должна содержать указатель, она объявляется следующим образом:

тип *имя;
где тип – это любой допустимый тип (базовый тип указателя), а имя – это имя переменной-указателя. Все арифметические действия с указателями выполняются применительно к базовому типу. Поэтому базовый тип указателя играет важную роль.



Поделиться:


Последнее изменение этой страницы: 2017-02-06; просмотров: 170; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.114.245 (0.014 с.)