Мегаобучалка Главная | О нас | Обратная связь


Void srand ( unsigned int seed )



2019-11-13 179 Обсуждений (0)
Void srand ( unsigned int seed ) 0.00 из 5.00 0 оценок




Изучаем основы Си самостоятельно

Вступление

      

« Hello , World » и синтаксис языка Си

           

 

Обмен данными между функциями

       Не поняв, как функции обмениваются между собой данными – дальнейшее изучение языка Си, считаю бессмысленным (имхо). Если мы не будем знать, как ввести данные в функцию для расчётов в этой функции и затем вывести результат этих расчётов в другую функцию – как можно вообще что-либо сделать или написать программу? Это абсолютно невозможно, если, конечно же, не считать «Hello, World» и т.п. за программу.

 

Решение поставленной задачи

       Для решения поставленной задачи, для написания программы, нам понадобится:

1. поставить конкретную задачу

2. составить алгоритм решения нашей задачи

3. описать отдельные функции составленного алгоритма

4. описать сам алгоритм решения задачи

 

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

Ключевые слова:

Следующие идентификаторы зарезервированы в качестве ключевых слов и не могут использоваться по другому:

Asm                   auto                  double              int                     struct                break               else                   long

Switch               case                  enum                fortran            register            typedef            char                  extern

Return              union                const                 float                 short                 unsigned          continue          for

Signed              void                  default            goto                  sizeof               volatile            do                      if

Static                 while

       Типы переменных :

void – неопределённая переменная без значения

int – целое число, имеющее типовой размер для данной системы

float – вещественное число с плавающей точкой одинарной точности

char – один байт, содержащий один символ из локального символьного набора

double – вещественное число с плавающей точкой двойной точности

       Расширители типа переменных:

short – короткое целое число

long – длинное целое число

signed – со знаком

unsigned – без знака

       Модификаторы типа переменных:

const – константа, значение должно быть определено сразу, дальнейшее присваивание этому типу – запрещено

volatile – зависит от реализации конкретного компилятора

       Управляющие символы:

\ a – подача звукового сигнала               \ b – возврат назад и затирание               \ f – прогон страницы

\ n – конец строки, перевод каретки       \ r – возврат каретки                                   \ t – горизонтальная табуляция

\ v – вертикальная табуляция                  \\ – обратная косая черта: \                     \? – знак вопроса: ?

\’ – одинарная кавычка: ‘                         \” – двойная кавычка: “                            \ ooo – восьмеричное число

\ xhh – шестнадцатиричное число

       Комбинации из 3-х символов:

??= – это:  #                   ??/ – это: \                      ??’ – это: ^                    ??( – это: [                      ??) – это: ]

??! – это: |                      ??< – это: {                    ??> – это: }                    ??- – это:

       Символы символьного ввода/вывода:

% d – ввод/вывод целого десятичного числа (переменная типа int)

% f – ввод/вывод вещественного числа с плавающей точкой одинарной точности (переменная типа float)

% c – ввод/вывод одного символа (переменная типа char)

% s – ввод/вывод символьной строки (переменная типа char)

% e – ввод/вывод числа в научной записи с мантиссой, например: 123.45=1.2345*10^2=1.2345 e +02

% g – автоматический выбор формата числа

% n – количество символов введённых/выведенных на данный момент

       Форматирование символьного ввода/вывода:

%5 d – ввод/вывод целого десятичного числа (переменная типа int) и выравнивание на 5-ть позиций вправо

%-5 d – ввод/вывод целого десятичного числа (переменная типа int) и выравнивание на 5-ть позиций влево

%5.2 f – ввод/вывод вещественного числа с плавающей точкой одинарной точности (переменная типа float) и выравнивание вправо на 5-ть позиций, 2-е из которых – дробная часть после запятой

%-5.2 f – ввод/вывод вещественного числа с плавающей точкой одинарной точности (переменная типа float) и выравнивание влево на 5-ть позиций, 2-е из которых – дробная часть после запятой

       Арифметические операции:

x = a                                                                 – приравнивание, x становится равным a

x = x + a            x += a                                – сложение

x = x +1            ++ x                    x ++    – инкремент

x = x - a             x -= a                                 – вычитание

x = x - 1            -- x                      x --      – декремент

x = x * a            x *= a                                – умножение

x = x / a             x /= a                                 – деление

x = x % a          x %= a                              – остаток от деления

       Операции сравнения:

x < y – если выражение верно (x действительно меньше y), результат будет равен 1, если не верно – 0 (результат имеет тип int)

x > y – если выражение верно (x действительно больше y), результат будет равен 1, если не верно – 0 (результат имеет тип int)

x <= y – если выражение верно (x меньше или равен y), результат будет равен 1, если не верно – 0 (результат имеет тип int)

x >= y – если выражение верно (x больше или равен y), результат будет равен 1, если не верно – 0 (результат имеет тип int)

x == y – если выражение верно (x действительно равен y), результат будет равен 1, если не верно – 0 (результат имеет тип int)

x != y – если выражение верно (x действительно не равен y), результат будет равен 1, если не верно – 0 (результат имеет тип int)

       Логические операции:

& – поразрядное «И», только целочисленное значение (тип int)

| – поразрядное «ИЛИ», только целочисленное значение (тип int)

^ – поразрядное исключающее «ИЛИ», только целочисленное значение (тип int)

&& – логическое «И», результат будет равен 1, если справа и слева операнды не равны 0, иначе – 0 (результат имеет тип int)

|| – логическое «ИЛИ», результат будет равен 1, если любой из операндов не равнен 0, иначе – 0 (результат имеет тип int)

выражение_ a ? выражение_ b : выражение_ c – выбор по условию, если результат выражение_a не равен 0 – выполняется выражение_b, если результат выражение_a равен 0– выполняется выражение_c

       Классы памяти :

register – резервирует регистровую память, мало данных помещается – применяется только внутри функций (не применима &)

           register объявление_переменной_или_константы

auto – резервирует память автоматически, адрес памяти можно вычислить

           auto объявление_функции

static – резервирует статический, неизменный адрес памяти

           static объявление_переменной_или_константы

extern – объявление экстерном – указывает, что память объекту выделена где-то в другом месте программы

           extern объявление_переменной_или_константы

           extern объявление_функции

typedef – не резервирует никакой памяти

           typedef объявление_переменной_или_константы

                          typedef int Desyatichnoe – теперь Desyatichnoe – это тоже, что и int, т.е. далее можно объявить переменную: Desyatichnoe x, вместо int x

       Структура:

struct – объявление структуры

                          struct идентификатор { список_объявления_структуры } переменные_структуры_(необязательно);

union

                          union идентификатор { список_объявления_структуры }

       Множество именованных констант:

enum – можно перечислить множество именованных констант

                          enum идентификатор { список_констант }

                          enum идентификатор

       Операторы:

\ – продолжение длинной строки со следующей строки

           printf ( “1\                       – это равносильно записи: printf ( “1234” );

           23\

           4”\

            )\

           ;

if - else – оператор выбора по условию

           if ( выражение ) оператор_1;   – если выражение истинно, не равно 0 – выполняется оператор_1, иначе – далее

или

           if ( выражение ) {                         – если выражение истинно, не равно 0 – выполняются все операторы в фигурных скобках,

оператор_1;                  иначе, если выражение ложно, равно 0 – далее

                          оператор_2;

                          ………

                          оператор_x;}

или

           if ( выражение ) оператор_1;   – если выражение истинно, не равно 0 – выполняется оператор_1, иначе, если выражение

           else оператор_2                           ложно, равно 0 – выполняется оператор_2 и далее

или

           if ( выражение ) {                         – если выражение истинно, не равно 0 – выполняются все операторы x в фигурных

оператор_x1;                скобках, иначе, если выражение ложно, равно 0 – выполняются все операторы y в

                          оператор_x2;                фигурных скобках, затем - далее

                          ………

                          оператор_x;}

           else {

оператор_y1;

оператор_y2;

………

оператор_y;}

или

           if ( выражение_1 ) оператор_1;              – если выражение истинно_1, не равно 0 – выполняется оператор_1, иначе, если

           else if ( выражение_2 ) оператор_2       выражение_2, не равно 0 – выполняется оператор_2, иначе, если выражение_3,

           else if ( выражение_3 ) оператор_3       не равно 0 – выполняется оператор_3, иначе, выполняется оператор_4 и далее

           else оператор_4

switch – множественный выбор по условию, сверяет выражение с метками, если совпадает – переход к операторам после метки и далее, к следующим операторам, после следующей метки, пока не встретится оператор принудительного выхода break, после break – выход из switch. Если ни одна метка не совпадает – выполняются операторы после default и осуществляется выход из switch.

           switch ( выражение ) {

                          case ‘метка_1’ : оператор_1; оператор_2;

                          case ‘метка_2’ : оператор_3; оператор_4; break;

                          case ‘метка_3’ : case ‘метка_4’ : case ‘метка_5’ : оператор_5; оператор_6;

                          case ‘метка_6’ : оператор_7; оператор_8;

default : оператор_9; }

Если выражение=метка_1 – выполняются операторы 1, 2, 3, 4 и осуществляется выход из switch

Если выражение=метка_2 – выполняются операторы 3, 4 и осуществляется выход из switch по оператору break

Если выражение=метка_3 или метка_4, или метка_5 – выполняются операторы 5, 6, 7, 8, 9 и осуществляется выход из switch

Если выражение=метка_6 – выполняются операторы 7, 8, 9 и осуществляется выход из switch

Если выражение=метка_9 – выполняются оператор 9 и осуществляется выход из switch

Если выражение не равно ни одной метке – выполняются оператор 9 и осуществляется выход из switch

while – оператор цикла с условием, условие проверяется в начале цикла

           while ( выражение )                     – вычисляется выражение, если выражение истинно, равно 1, не равно 0 – выполняется

                          оператор;                       оператор или группа операторов, затем снова вычисляется выражение и т.д. Цикл

или                                                                  завершается, когда выражение становится равно 0 и управление передаётся к

           while ( выражение ) {                  следующим после конструкции while операторам. Выход из цикла может

                          оператор_1;                  осуществляться по команде break или по команде return.

оператор_2;

                          ………

оператор_x;}

for – оператор цикла с фиксированным шагом, проверяет все три условия в начале цикла

           for ( выражение_1; выражение_2; выражение_3 )                          – любое из выражений можно не указывать, но точки с запятой

                          оператор;                                                                      должны оставаться, если не указать все выражения – цикл

или                                                                                                                 становится вечным! выражение_1 – начало цикла (точка

           for ( выражение_1; выражение_2; выражение_3 ) {       отсчёта), выражение_2 – логическое условие выполнения

                          оператор_1;                                                                 цикла, выражение_3 – подсчёт шага приращения цикла. Выход

оператор_2;                                                                 из цикла может осуществляться по команде break или по

                          ………                                                                            команде return.

оператор_x;}

do - while – оператор цикла с условием, условие проверяется в конце цикла

           do                                                      – сначала выполняются оператор или операторы после do, затем вычисляется выражение,

                          оператор;                       если выражение истинно, равно 1, не равно 0 – цикл выполнения оператора или

           while ( выражение ) ;                  операторов выполняется заново, пока выражение не станет равно 0, тогда управление

или                                                                  передаётся к следующим после конструкции while операторам. Выход из цикла может

           do {                                                  осуществляться по команде break или по команде return.

                          оператор_1;

оператор_2;

                          ………

оператор_x;}

           while ( выражение ) ;

break – принудительный выход из switch, while, for и do - while

continue – пропускает операторы внутри цикла после себя, передавая управление следующему шагу цикла (проверке условия), применим к циклам while, for и do - while

goto – оператор перехода к метке

           goto имя_метки;                           – переход из этого места к месту с именем имя_метки и выполнение операторов после

                          ………                             имя_метки, причём, если переход к имя_метки был осуществлён не от оператора

           имя_метки :                                   goto, а от предъидущего, перед имя_метки оператора – все операторы после имя_метки,

                          ………                             так же выполняются

или

           goto имя_метки;

                          ………

           имя_метки : оператор;

или

           goto имя_метки

                          ………

           имя_метки : {

                          оператор_1;

оператор_2;

                          ………

оператор_x;}

или

           имя_метки :

                          ………

           goto имя_метки;

                          ………

return – оператор возвращает из данной функции некоторое сосчитанное значение

           return ( 0 )                      – функция возвращает 0

           return ( x )                      – функция возвращает x

           return ( x + y )               – функция возвращает сумму x и y

           return ( 1 + 4 )               – функция возвращает 5

       Операторы препроцессора:

# include – подключение внешних файлов с кодом, подставляет в код всё содержимое подключаемого файла, эта директива сама производит поиск файла с указанным именем и в указанной директории (каталоге, папке)

# include “имя_файла.h”            – подключает файл имя_файла.h, находящийся в том же месте, что и файлы проекта, если

файла в этом месте нет – подключается файл имя_файла.h из стандартной для данного

компилятора, директории

           # include “include/имя_файла.h” – подключает файл имя_файла.h, находящийся в директории include, которая находится в

том же месте, что и файлы проекта, если файла в этом месте нет – подключается файл

имя_файла.h из стандартной для данного компилятора, директории

# include <имя_файла.h>           – подключается файл имя_файла.h из стандартной для данного компилятора, директории

# include _ next – работает, подобно # include, только поиск файла начинается с директории, следующей после той, в которой этот файл уже был найден

           Стандартный набор каталогов в Линукс:                          /usr/local/include

                                                                                                         /usr/lib/gcc-lib/target/version/include

                                                                                                         /usr/target/include

                                                                                                         /usr/include

# define – макроопределение (макрос)

# define имя_переменной текст_для_подстановки           – подставляет текст_для_подстановки в имя_переменной во

                                                                                                                   всём проекте, кроме, как в имя_переменной, заключённой

                                                                                                                        в кавычки. текст_для_подстановки может быть любым,

                                                                                                                        включая операторы и конструкции операторов, которые в свою

                                                                                                                        очередь, будут выполнятся при вызове имя_переменной, т.к.

                                                                                                                        они будут подставлены, как текст программы вместо

имя_переменной

#undef – отмена макроопределения (макроса)

# undef имя_переменной            – отменяет имя_переменной во всём проекте, теперь, назначенный ранее

текст_для_подстановки, не будет вставляться вместо имя_переменной. Это очень

удобно, чтобы удостовериться, что имя_переменной определяет именно имя функции, а

не имя макроса

# if – выполнение последующих операторов по условию, аналогично if, но для препроцессора, код программы, последующие операторы, которые находятся между # if и # endif компилируются при условии выполнения # if – выражение не равно 0

# elif – выполнение последующих операторов по условию, аналогично else if, но для препроцессора

# else – выполнение последующих операторов по условию, аналогично else, но для препроцессора

# endif – окончание выполнения операторов препроцессора по условию, этим оператором должен заканчиваться любой # if

# ifdef – выполнение последующих операторов по условию, аналогично if, но для препроцессора, код программы, последующие операторы, которые находятся между # ifdef и # endif компилируются при условии выполнения # ifdef – макрос в # ifdef определён

# ifndef – выполнение последующих операторов по условию, аналогично if, но для препроцессора, код программы, последующие операторы, которые находятся между # ifdef и # endif компилируются при условии выполнения # ifdef – макрос в # ifdef не определён

# line – указывает компилятору номер строки и, возможно, имя файла, для размещения отладочной информации в объектном файле

# pragma – стандартный метод предоставления дополнительной информации об особенностях компилятора и аппаратной платформы

# error – выдаёт сообщение об ошибке и останавливает препроцессор, используется при отладке

           #error “Error, please delete #error”          – останавливает компиляцию и выводит сообщение Error, please delete #error или

то сообщение, которое укажете в кавычках

# warning – выводит предупредительное сообщение препроцессора, используется при отладке

           #warning “Warning, please delete #warning”        – выводит сообщение Warning, please delete #warning или то сообщение,

которое укажете в кавычках

## – оператор объединения строк, используется внутри макроса

       Стандартные библиотечные функции:

<stdio.h> – ввод/вывод

Файловые операции:

           FILE *fopen ( const char *filename, const char *mode )

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

"г" – открытие текстового файла для чтения

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

"а" – открытие или создание текстового файла для записи в конец (дописывания)

"r +" – открытие или создание текстового файла для модифицирования (чтения и записи)

"w +" – создание текстового файла для модифицирования; старое содержимое, если оно было, стирается

"a +" – открытие или создание текстового файла для модифицирования, записи в конец

Режим модифицирования позволяет выполнять чтение и запись в один и тот же файл; перед переходом от чтения к записи и обратно необходимо вызвать функцию fflush или функцию позиционирования в файле. Если включить в параметр режима букву b после первой буквы (например, "rb" или "w+b"), то это будет означать, что файл — двоичный. Имя файла должно быть не длиннее FILENAME_MAX символов. Одновременно могут оставаться открытыми не более FOPEN_MAX файлов.

           FILE *freopen ( const char *filename, const char *mode, FILE *stream )

Функция freopen открывает файл в заданном режиме и ассоциирует с ним поток. Она возвращает указатель на поток или NULL в случае ошибки. Как правило, freopen используется для замены файлов, ассоциированных с потоками stdin, stdout и stderr.

           int fflush ( FILE *stream )

Применительно к потоку вывода функция fflush выполняет запись всех буферизованных, но еще не записанных данных; результат применения к потоку ввода не определён. В случае ошибки записи функция возвращает EOF, в противном случае — нуль. Вызов fflush (NULL) выполняет указанные операции для всех потоков вывода.

           int fclose ( FILE *stream )

Функция fclose выполняет запись буферизованных, но еще не записанных данных, уничтожает непрочитанные буферизованные входные данные, освобождает все автоматически выделенные буфера, после чего закрывает поток. Возвращает EOF в случае ошибки и нуль в противном случае.

           int remove ( const char *filename )

Функция remove удаляет файл с указанным именем; последующая попытка открыть файл с этим именем приведет к ошибке. Возвращает ненулевое значение в случае неудачной попытки.

int rename ( const char *oldname, const char *newname )

Функция rename заменяет старое имя файла (oldname) на новое (newname); возвращает ненулевое значение, если попытка изменить имя оказалась неудачной.

FILE *tmpfile ( void )

Функция tmpfile создает временный файл с режимом доступа "wb+", который автоматически удаляется при его закрытии или нормальном завершении программы. Эта функция возвращает указатель потока или NULL, если не смогла создать файл.

char *tmpnam ( char s[L_tmpnam] )

Вызов tmpnam (NULL) создает строку, не совпадающую ни с одним из имен существующих файлов, и возвращает указатель на внутренний статический массив. Вызов tmpnam (s) помещает строку в s и возвращает ее в качестве значения функции; длина s должна быть не менее L_tmpnam символов. При каждом вызове tmpnam генерируется новое имя; при этом гарантируется не более ТМР_МАХ различных имен за один сеанс работы программы. Отметим, что tmpnam создает имя, а не файл.

int setvbuf ( FILE *stream, char *buf, int mode, size_t size )

Функция setvbuf управляет буферизацией потока; ее нужно вызвать до того, как будет выполняться чтение, запись или какая-либо другая операция. Параметр mode, со значением _IOFBF, задает полную буферизацию, _IOLBF — построчную буферизацию текстового файла, a _IONBF отменяет буферизацию вообще. Если параметр buf не равен NULL, то его значение будет использоваться как указатель на буфер, в противном случае - для буфера будет выделена память. Параметр size задает размер буфера. Функция setvbuf возвращает ненулевое значение в случае ошибки.

           void setbuf ( FILE *stream, char *buf )

Если параметр buf равен NULL, то для потока stream буферизация отменяется. В противном случае вызов setbuf эквивалентен вызову (void) setvbuf (stream, buf, _IOFBF, BUFSIZ).

Форматированный вывод:

           int fprintf ( FILE *stream, const char *format, ... )

Функция fprintf преобразует и выводит данные в поток stream под управлением строки формата format. Возвращается количество записанных символов или, в случае ошибки, отрицательное число. Строка формата содержит два вида объектов: обычные символы, копируемые в поток вывода, и спецификации формата, которые задают преобразование и вывод следующих далее аргументов fprintf в том порядке, в каком они перечислены. Каждая спецификация формата начинается с символа % и заканчивается символом-спецификацией вывода. Между % и символом-спецификацией могут находиться следующие дополнительные элементы в том порядке, в котором они перечислены ниже:

  – флаги (в любом порядке), модифицирующие спецификацию формата:

- – задает выравнивание форматированного аргумента по левому краю его поля

+ – требует обязательного вывода числа со знаком

пробел – при отсутствии знака перед числом должен стоять пробел

0 – задает дополнение поля слева до заданной ширины нулями при выводе числа

# – задает альтернативную форму вывода: для 0 первой цифрой должен быть 0, для х или X ненулевому результату должны предшествовать символы 0х или 0Х; для е, Е, f, g и G результат должен обязательно содержать десятичную точку; для g и G запрещается удалять нули в конце числа

– число, определяющее минимальную ширину поля. Преобразованный аргумент выводится в поле, размер которого не меньше указанной ширины, а если потребуется — то и в поле большего размера. Если количество символов преобразованного аргумента меньше ширины поля, то поле будет дополнено слева (или справа, если задано выравнивание по левому краю) до заданной ширины. Обычно поле дополняется пробелами, но в присутствии соответствующей спецификации — нулями.

– точка, отделяющая параметр ширины поля от точности

– число, задающее точность, которое определяет максимальное количество символов, выводимых из строки, или количество цифр после десятичной точки в спецификациях е, Е или f, или же количество значащих цифр для g или G, или минимальное количество цифр при выводе целого числа (до необходимой ширины поля число дополняется нулями).

– модификатор длины h, 1 или L. Символ h определяет, что соответствующий аргумент должен выводиться как short или unsigned short; 1 сообщает, что аргумент имеет тип long или unsigned long; L указывает, что аргумент принадлежит к типу long double.

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

           int printf ( const char *format, ... )

Функция printf (...) эквивалентна fprintf (stdout, . . .)

int sprint ( char *s, const char *format, ... )

Функция sprintf работает так же, как и printf, только вывод выполняет в строку s, завершая ее символом ‘\0’. Строка s должна быть достаточно большой, чтобы вмещать результат вывода. Возвращает количество записанных символов без учета ‘\0’

int vprintf ( const char *format, valist arg )

int vfprintf (FILE *stream, const char *format, valist arg )

int vsprintf ( char *s, const char *format, va_list arg )

Функции vprintf, vfprintf и vsprintf эквивалентны соответствующим функциям printf с той разницей, что переменный список аргументов в них представлен параметром arg, инициализированным с помощью макроса va_start и, возможно, вызовами va_arg (см. описание файла stdarg. h).

Спецификации вывода функций printf и fprintf:

d , i     – int; десятичное число со знаком

o        – unsigned int; восьмеричное число без знака (без 0 в начале)

х, X   – unsigned int; шестнадцатеричное число без знака (без 0х или 0X в начале); в качестве цифр от 10 до 15 используются abcdef для х и ABCDEF для X

u        – unsigned int; десятичное целое число без знака

с         – int; одиночный символ после преобразования в unsigned char

s         – char *; символы строки выводятся, пока не встретится ‘\0’ или пока не будет выведено количество символов, заданное спецификацией точности

f         – double; десятичное число вида mmm.ddd, где количество цифр d задается точностью. По умолчанию точность равна 6;    нулевая точность запрещает вывод десятичной точки

e, Е    – double; десятичное число вида m.dddddde±xx или m.ddddddE±xx, где количество цифр d задается точностью. По умолчанию точность равна 6; нулевая точность запрещает вывод десятичной точки

g, G   – double; используется %е или %E, если показатель степени меньше -4, или больше, или равен точности; в противном случае используется %f. Завершающие нули и десятичная точка в конце не выводятся

p        – void выводится в виде указателя (представление зависит от реализации)

n        – int *; число символов, выведенных к текущему моменту текущим вызовом printf, записывается в аргумент. Никакого преобразования формата не происходит

%      – никакие аргументы не преобразуются; выводится символ %

Форматированный ввод:

           int fscanf ( FILE *stream, const char *format, ... )

Функция fscanf считывает данные из потока stream под управлением строки формата format и присваивает преобразованные значения последующим аргументам, каждый из которых должен быть указателем. Функция завершает работу, когда исчерпывается строка формата format. Она возвращает EOF, если до преобразования формата ей встречается конец файла или появилась ошибка. В противном случае функция возвращает количество введенных и помещенных по назначению элементов данных. Строка формата обычно содержит спецификации ввода, которые используются для правильной интерпретации вводимых данных. В эту строку могут входить следующие элементы:

– пробелы или табуляции, игнорируемые функцией;

– обычные символы (кроме %), которые должны совпасть с соответствующими символами в потоке ввода, отличными от символов пустого пространства;

– спецификации ввода, состоящие из знака %; необязательного символа *, запрещающего присваивание; необязательной ширины поля; необязательного символа h, l или L, уточняющего размер заполняемой переменной; и самого символа формата.   

Спецификация ввода определяет преобразование следующего поля ввода. Обычно результат помещается в переменную, на которую указывает соответствующий аргумент. Но если присваивание запрещено с помощью знака *, как, например, в спецификации %*s, то поле ввода пропускается и никакого присваивания не происходит. Поле ввода – это строка символов, отличных от символов пустого пространства; ввод прекращается, как только встретится символ пустого пространства или как только исчерпается заданная ширина поля (если она задана). Из этого следует, что scanf может переходить через границы строк, поскольку символ новой строки является символом пустого пространства (в число которых также входят символы пробела, табуляции, конца строки, возврата каретки, вертикальной табуляции и прогона страницы)

Перед символами формата d, i, n, o, u и x может стоять h, если аргумент — указатель на short, а не на int, или l, если аргумент является указателем на long. Символам формата е, f и g может предшествовать l, если аргумент — указатель на double, а не

на float, или L, если аргумент — указатель на long double.

           int scanf ( const char *format, ... )

Функция scanf (...) эквивалентна fscanf (stdin, . . .).

int sscanf ( const char *s, const char *format, ... )

Функция sscanf (s, . . .) эквивалентна scanf (...), только ввод выполняется из строки s.

Спецификации ввода функций scanf и fscanf:

d        – десятичное целое число; int *

i         – целое число; int *. Число может быть восьмеричным (с нулем в начале) или шестнадцатеричным (с 0x или 0X в начале)

о        – восьмеричное целое число {с нулем в начале или без него); int *

u        – десятичное целое число без знака; unsigned int *

x        – шестнадцатеричное целое число (с 0x или 0X в начале или без них); int *

c         – символ; char *. Очередные символы из входного потока помещаются в указанный м



2019-11-13 179 Обсуждений (0)
Void srand ( unsigned int seed ) 0.00 из 5.00 0 оценок









Обсуждение в статье: Void srand ( unsigned int seed )

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (179)

Почему 1285321 студент выбрали МегаОбучалку...

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

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.012 сек.)