Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Функция gets(). 1 страница

Читайте также:
  1. Castle of Indolence. 1 страница
  2. Castle of Indolence. 2 страница
  3. Castle of Indolence. 3 страница
  4. Castle of Indolence. 4 страница
  5. Castle of Indolence. 5 страница
  6. Castle of Indolence. 6 страница
  7. Castle of Indolence. 7 страница

Данная функция получает строку от стандартного устройства ввода. Функция читает символы до тех пор, пока ей не встретится символ новой строки (\n), который создается при нажатии на. Функция берет все символы до символа \n, присоединяет к ним \0 и передает строку вызывающей программе. Пример:

#include<stdio.h>

void main (void)

{

char name[81];

printf(«Привет!!! Как Вас зовут? \n»);

gets(name);

printf(«Хорошее имя, %s.\n», name);

}

В данном примере gets() примет любое имя (включая пробелы) длиной до 80 символов (один символ для \0). Если ввод строки с помощью gets() прошел нормально, то функция gets() возвращает считанную строку. Если произошла ошибка, или gets() встретила EOF, то она возвращает NULL или нулевой адрес. Таким образом gets() можно использовать при проверке:

while (gets(name)!=NULL)

Отличие gets() и scanf() заключается в том, как они определяют, что достигли конца строки. Для gets() признаком конца строки является \n.

При выводе строк в основном используются две функции: puts() и printf().

Функция puts().

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

#include<stdio.h>

#define DEF “Я есть строка”

void main (void)

{

static char str1[] = “Массив инициализирован. ”;

static char *str1= “Указатель инициализирован. ”;

puts(“Аргумент функции puts().”);

puts(DEF);

puts(str1);

puts(str2);

puts(&str1[4]);

puts(str2+4);

}

Результат работы программы следующий:

Аргумент функции puts().

Я есть строка.

Массив инициализирован.

Указатель инициализирован.

ив инициализирован.

атель инициализирован.

Этот пример напоминает, что фразы в кавычках и имена строк символьных массивов являются указателем. Обратите внимание на два последних оператора. Указатель &str1[4] ссылается на пятый элемент массива str1. Этот элемент содержит символ “и”. Функция puts() использует его в качестве начальной точки. Аналогично и str2+4 ссылается на ячейку памяти, содержащую “а”, и с нее начинается вывод строки.

Функция puts() прекращает свою работу, если встречается символ \0. (лучше, если он есть). Нельзя делать следующим образом:

static char dount[]={‘H’,’E’,’E’};

puts(dount);

Т.к. \0 отсутствует, puts() не знает, когда ей остановиться. Будет перебирать ячейки памяти, следующие за dount, бо тех пор, пока не найдет где-нибудь\0.

Замечание: любая строка, выводимая puts(), начинается с новой строки, то есть

если puts() находит \0, она заменяет его символом \n и затем выводит

строку.

10.

Начнем с функции вывода printf(), которая выполняет форматируемый вывод в стандартный поток stdout. Это означает, что значения переменных, которые хранятся в памяти в двоичном виде, при выводе в поток (на экран) переводятся в символьный вид, причем вид преобразования задается спецификатором формата. Спецификаторы формата задаются как составная часть обязательного первого аргумента — форматной строки. После форматной строки задается список выражений, значения которых должны выдаваться на экран. В качестве выражений допускается задавать и переменные. Функция возвращает количество выведенных символов. Если произошел сбой, то возвращается отрицательное значение.

Спецификатор формата начинаются символом % (процент), вслед за которым прописывается код формата. Количество аргументов-переменных должно в точности соответствовать количеству спецификаторов формата. При отсутствии списка переменных функция просто выводит в поток (на экран) форматную строку.

Спецификация формата имеет следующий вид:

%[флаг][ширина][.точность][h|l|L]тип

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

%тип

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

Тип Вид в потоке

c Символ

s Строка символов

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

o Целое восьмеричное

u Целое десятичное без знака

x, X Целое шестнадцатеричное

f Дробное число в фиксированном формате

e, E Дробное число в научном формате

g, G Дробное число в научном или фиксированном формате

p Указатель (в шестнадцатеричном виде)

Ширина показывает, сколько символов будет выведено в поток. В это число входят все символы: и знак, и десятичная точка для дробных чисел. Если ширина окажется фактически меньше, чем требуется для вывода, то все равно значение выводится полностью. Точность задает количество цифр дробной части и применяется обычно только для дробных чисел.

А теперь про ввод

Парная для printf() функция scanf() выполняет форматируемый ввод из стандартного потока stdin в переменные программы. Так как stdin "привязан" к клавиатуре, то при вводе, очевидно, выполняется преобразование из символьного вида во внутренний двоичный формат. Первым параметром тоже является форматная строка, за которой следует список адресов переменных, куда требуется поместить задаваемые значения. Функция возвращает количество успешно введенных значений. В случае ошибки функция scanf() возвращает системную константу EOF. Обычно эта константа определена как –1.

Символы в форматной строке делятся на три вида: спецификаторы формата, разделители и прочие. К разделителям относятся пробел, табуляция ('\t') и символ конца строки ('\n'). Спецификаторы формата — такие же, как и для функции printf()

риведем еще несколько тонкостей, связанных со вводом строк и символов:

1. Спецификатор %c читает очередной символ, в том числе и символ-разделитель. Чтобы пропустить один символ-разделитель и прочитать следующий основной символ, используйте %1s.

2. Аргументом для спецификатора %Wc (W — ширина поля) должен быть массив символов, состоящий из W элементов (char arg[W]).

3. Множество символов, заключенное в квадратные скобки [], может быть подставлено вместо символа типа s.

 

11.

Операторы

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

Это простой оператор:

A:= B;

Это составной или структурированный оператор:

begin

B:= C;

A:= B;

end;

Простые операторы

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

MyValue:=

MyValue + (SomeVeryLongStatement / OtherLongStatement);

Составные операторы

Составные операторы всегда заканчиваются точкой с запятой.

begin

MyStatement;

MyNext Statement;

MyLastStatement;

end;

 

11.

Согласно принятой нами терминологии, любое законченное предложение на языке C++ называется оператором. Рассмотрим множество БНФ, определяющих синтаксис операторов.

Оператор::= ОператорВыражение

::= Объявление

::= СоставнойОператор

::= ПомеченныйОператор

::= ОператорПерехода

::= ВыбирающийОператор

::= ОператорЦикла

ОператорВыражение::= [Выражение];

Судя по последней форме Бэкуса-Наура, любое правильно построенное выражение (построенное по правилам грамматики), заканчивающееся точкой с запятой, является оператором C++. Мы уже второй раз сталкиваемся с пустым оператором (достаточно внимательно посмотреть на последнюю форму Бэкуса-Наура). Первый раз мы встретили пустой оператор при анализе объявления. Ничего удивительного. Объявление - это тоже оператор. Пустой оператор имеет особое назначение. Он используется везде, где по правилам синтаксиса обязательно требуются операторы, а по алгоритму раазрабатываемой программы не нужно ни одного. Эти ситуации подробно будут рассмотрены ниже. Оператор объявления мы уже рассмотрели ранее. На очереди - составной оператор.

СоставнойОператор::= {[СписокОператоров]}

Что такое список операторов - также уже известно. Судя по последней БНФ, составной оператор (даже пустоой) всегда начинается разделителем { и завершается разделителем }. Кроме того, составной оператор может быть абсолютно пустым (между двумя фигурными скобками может вообще ничего не стоять).

Так что конструкция

{};

однозначно воспринимается транслятором как последовательность, состоящая из двух операторов - пустого составного оператора и простого пустого.

Для исключения путаницы в понятиях "операция" и "оператор", отметим, что оператор - это наименьшая исполняемая единица программы. Различают операторы выражения, действие которых состоит в вычислении заданных выражений (например: a = sin(b)+c; j++;), операторы объявления, составные операторы, пустые операторы, операторы метки, цикла и т.д. Для обозначения конца оператора в языке Си используется точка с запятой. Что касается составного оператора (или блока), представляющего собой набор логически связанных операторов, помещенных между открывающей ({) и закрывающей (}) фигурными скобками ("операторными скобками"), то за ним точка с запятой не ставится. Отметим, что блок отличается от составного оператора наличием определений в теле блока.

 

12.

Конструкции принятия решений позволяют программисту проверять усло-вия и выбирать направление действий.

Одним из видов конструкции принятия решений являются циклы.

В С ++ применяются:

•одноальтернативный оператор if.

•двухальтернативный оператор if-else.

•многоальтернативный оператор switch

•вложенные конструкции принятия решений

•операторы try, catch и throw

•оператор цикла for

•оператор цикла do-while

•оператор цикла while

•пропуск итерации

•выход из циклов

•вложенные циклы

Одноальтернативный оператор условия if.

if <условие> оператор; - простая форма

Двухальтернативный оператор условия if-else.

Двухальтернативный оператор if-else обеспечивает два альтернативных направления действий в зависимости от значения проверяемого булева условия.

Многоальтернативный оператор условия IF - ELSE.

If (условие1) <оператор1>;|<последов.опер.1>

Else if (условие2) <оператор2>;

...

else if (условие n)<оператор n1>;

else <оператор n2>;

Оператор SWITCH.

Оператор switch предлагает специальную форму создания многоальтерна-тивного решения. Это позволяет вам исследовать разнообразные значения выра-жения (тип которого совместим с целым) и выбирать соответствующее направле-ние действия.

Правила использования оператора SWITCH сводятся к следующему:

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

2. Значение после каждой метки case должно быть константой.

3. С++ не поддерживает метки case c диапазоном значений. В этом случае каждое значение из диапазона должно появляться с отдельной меткой case.

4. Окончание оператора case обычно отмечается словом break. Это вызывает пе-реход к выполнению первого оператора, который следует после SWITCH. Если break не включен, то выполнение будет продолжаться со следующего опера-тора case.

5. Предложение default - всеохватывающее, но оно не обязательно, если вы хо-тите проверить только отдельный ряд случаев.

6. Ряд операторов в каждой метке case или в групповых метках case можно не за-ключать в фигурные скобки.

13.

Формат оператора:

if (выражение) оператор-1; [else оператор-2;]

Выполнение оператора if начинается с вычисления выражения.

Далее выполнение осуществляется по следующей схеме:

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

- если выражение ложно (т.е. равно 0),то выполняется оператор-2.

- если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.

После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.

Пример:

if (i < j) i++: else { j = i-3; i++; }

Этот пример иллюстрирует также и тот факт, что на месте оператор-1, так же как и на месте оператор-2 могут находиться сложные конструкции.

Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.

 

14.

Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:

switch (выражение) { [объявление]: [ case константное-выражение1]: [ список-операторов1] [ case константное-выражение2]: [ список-операторов2]:: [ default: [ список операторов ]] }

Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке программирования С, значение которого должно быть целым. Отметим, что можно использовать явное приведение к целому типу, однако необходимо помнить о тех ограничениях и рекомендациях, о которых говорилось выше.

Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора smitch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору.

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

Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент помеченный ключевым словом default.

Список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.

Отметим также, что в операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.

Схема выполнения оператора switch следующая:

- вычисляется выражение в круглых скобках;

- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;

- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;

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

Отметим интересную особенность использования оператора switch: конструкция со словом default может быть не последней в теле оператора switch. Ключевые слова case и default в теле оператора switch существенны только при начальной проверке, когда определяется начальная точка выполнения тела оператора switch. Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.

Для того, чтобы выполнить одни и те же действия для различных значений выражения, можно пометить один и тот же оператор несколькими ключевыми словами case.

Пример:

int i=2; switch (i) { case 1: i += 2; case 2: i *= 3; case 0: i /= 2; case 4: i -= 5; default:; }

15.

Цикл while предназначен для повторного вычисления блока операторов, пока остается истинным задаваемое в нем выражение-условие. Его общий синтаксис имеет две формы:

МЕТКА while (ВЫРАЖЕНИЕ) БЛОК

МЕТКА while (ВЫРАЖЕНИЕ) БЛОК continue БЛОК1

Все операторы цикла могут быть снабжены не обязательными метками. В Perl метка представляет правильный идентификатор, завершающийся двоеточием ":". Она важна для команды перехода next, о которой мы поговорим в следующем разделе.

Оператор while выполняется по следующей схеме. Вычисляется выражения-условия ВЫРАЖЕНИЕ. Если оно истинно, то выполняются операторы БЛОК. В противном случае оператор цикла завершает свою работу и передает управление следующему после него оператору программы (цикл 1 примера 5.5). Таким образом, оператор цикла while является управляющей конструкцией цикла с предусловием: сначала проверяется условие завершения цикла, а потом только тело цикла, определяемое операторами БЛОК. Поэтому может оказаться, что тело цикла не будет выполнено ни одного раза, если при первом вхождении в цикл условие окажется ложным (цикл 3 примера 5.5).

Вместо ключевого слова while можно использовать ключевое слово until. В этом случае управляющая конструкция называется циклом until, который отличается от разобранного цикла while тем, что его тело выполняется, только если выражение условия ложно. Блок операторов БЛОК!, задаваемый после ключевого слова continue, выполняется всякий раз, когда осуществляется переход на выполнение новой итерации. Это происходит после выполнения последнего оператора тела цикла или при явном переходе на следующую итерацию цикла командой next. Блок continue на практике используется редко, но с его помощью можно строго определить цикл for через оператор цикла while.

 

16.

Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:

do тело while (выражение);

Схема выполнения оператора do while:

1. Выполняется тело цикла (которое может быть составным оператором).

2. Вычисляется выражение.

3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.

Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.

Операторы while и do while могут быть вложенными.

Пример:

int i,j,k;... i=0; j=0; k=0; do { i++; j--; while (a[k] < i) k++; } while (i<30 && j<-30);

 

17.

Цикл FOR.

Цикл for в C++ отличается большей гибкостью, поскольку с его помощью можно организовать как фиксированные, так и условные итерации.

for (< инициализация переменных управления циклом>;

<проверка продолжения цикла>;

< модификация переменных управления циклом, часто их приращение или уменьшения>)

<оператор>;

Пример:

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

cout << "i=" <Оператор for имеет три компоненты, каждый из которых необязателен. Пер-вый компонент инициализирует переменные управления циклом. Второй - это условие, которое проверяет, будет ли цикл выполнять следующую итерацию, по-следний компонент - приложение, которое изменяет переменные управления циклом; часто это просто операции инкримента и / или декримента.

Открытые циклы, использующие циклы for.

Если оставить все три компонента цикла пустыми, результатом будет от-крытый цикл. (open loop).

C++ позволяют выходить из них следующими способами:

1.Оператор break вызывает переход к выполнению кода, следующего за текущим циклом, во многом подобен тому, как он мог бы быть использован, чтобы про-должить выполнение вне оператора switch. Используйте оператор break, если вы хотите выйти из цикла и продолжить работу, оставшейся части программы.

2.Оператор return осуществляет возврат из текущей функции (включая main). О return и функциях далее.

3.Оператор throw вызывает генерацию исключения. Это используется, если произошла ошибка, и вы можете продолжать выполнение оставшейся части программы без какого-либо обработчика ошибок. Однако, применяйте этот метод с осторожностью; исключения предназначены для использования в не-штатных обстоятельствах - в случае ошибок.

4.В самых чрезвычайных случаях выйти из программы можно с помощью функ-ции exit (STDLIB.H). Эту функцию используют только в крайней необходи-мости, когда не остается никакой надежды на восстановления работоспособ-ности программы. Функция exit прекратит выполнение итерации и приведет к выходу из программы.

 

18.

При выполнении операций происходят неявные преобразования типов в следующих случаях:

- при выполнении операций осуществляются обычные арифметические преобразования (которые были рассмотрены выше);

- при выполнении операций присваивания, если значение одного типа присваивается переменной другого типа;

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

Кроме того, в Си есть возможность явного приведения значения одного типа к другому.

В операциях присваивания тип значения, которое присваивается, преобразуется к типу переменной, получающей это значение. Допускается преобразования целых и плавающих типов, даже если такое преобразование ведет к потере информации.

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

Преобразование целого со знаком к плавающему типу происходит без потери] информации, за исключением случая преобразования значения типа long int или unsigned long int к типу float, когда точность часто может быть потеряна.

Преобразование целых типов без знака. Целое без знака преобразуется к более короткому целому без знака или со знаком путем усечения старших битов. Целое без знака преобразуется к более длинному целому без знака или со знаком путем дополнения нулей слева.

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

Целые значения без знака преобразуются к плавающему типу, путем преобразования целого без знака к значению типа signed long, а затем значение signed long преобразуется в плавающий тип. Преобразования из unsigned long к типу float, double или long double производятся с потерей информации, если преобразуемое значение больше, чем максимальное положительное значение, которое может быть представлено для типа long.

Преобразования плавающих типов. Величины типа float преобразуются к типу double без изменения значения. Величины double и long double преобразуются к float c некоторой потерей точности. Если значение слишком велико для float, то происходит потеря значимости, о чем сообщается во время выполнения.

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

Преобразования из float, double или long double к типу unsigned long производится с потерей точности, если преобразуемое значение больше, чем максимально возможное положительное значение, представленное типом long.

Преобразование типов указателя. Указатель на величину одного типа может быть преобразован к указателю на величину другого типа. Однако результат может быть не определен из-за отличий в требованиях к выравниванию и размерах для различных типов.

Указатель на тип void может быть преобразован к указателю на любой тип, и указатель на любой тип может быть преобразован к указателю на тип void без ограничений. Значение указателя может быть преобразовано к целой величине. Метод преобразования зависит от размера указателя и размера целого типа следующим образом:

- если размер указателя меньше размера целого типа или равен ему, то указатель преобразуется точно так же, как целое без знака;

- если указатель больше, чем размер целого типа, то указатель сначала преобразуется к указателю с тем же размером, что и целый тип, и затем преобразуется к целому типу.

Целый тип может быть преобразован к адресному типу по следующим правилам:

- если целый тип того же размера, что и указатель, то целая величина просто рассматривается как указатель (целое без знака);

- если размер целого типа отличен от размера указателя, то целый тип сначала преобразуется к размеру указателя (используются способы преобразования, описанные выше), а затем полученное значение трактуется как указатель.

Преобразования при вызове функции. Преобразования, выполняемые над аргументами при вызове функции, зависят от того, был ли задан прототип функции (объявление "вперед") со списком объявлений типов аргументов.

Если задан прототип функции и он включает объявление типов аргументов, то над аргументами в вызове функции выполняются только обычные арифметические преобразования.

Эти преобразования выполняются независимо для каждого аргумента. Величины типа float преобразуются к double, величины типа char и short преобразуются к int, величины типов unsigned char и unsigned short преобразуются к unsigned int. Могут быть также выполнены неявные преобразования переменных типа указатель. Задавая прототипы функций, можно переопределить эти неявные преобразования и позволить компилятору выполнить контроль типов.

Преобразования при приведении типов. Явное преобразование типов может быть осуществлено посредством операции приведения типов, которая имеет формат:

(имя-типа) операнд.

18,19

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

Если один из операндов в выражении имеет тип long double, то остальные тоже преобразуются к типу long double.

В противном случае, если один из операндов в выражении имеет тип double, то остальные тоже преобразуются к типу double.

В противном случае, если один из операндов в выражении имеет тип float, то остальные тоже преобразуются к типу float.

В противном случае, если один из операндов в выражении имеет тип unsigned long, то остальные тоже преобразуются к типу unsigned long.

В противном случае, если один из операндов в выражении имеет тип long, то остальные тоже преобразуются к типу long.

В противном случае, если один из операндов в выражении имеет тип unsigned, то остальные тоже преобразуются. к типу unsigned.

В противном случае все операнды преобразуются к типу int. При этом тип char преобразуется в int со знаком; тип unsigned char в int, у которого старший байт всегда нулевой; тип signed char в int, у которого в знаковый разряд передается знак из сhar; тип short в int (знаковый или беззнаковый).

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

В языке Си можно явно указать тип любого выражения. Для этого используется операция преобразования ("приведения") типа. Она применяется следующим образом:

(тип) выражение

(здесь можно указать любой допустимый в языке Си тип).

Рассмотрим пример:


Дата добавления: 2015-07-26; просмотров: 58 | Нарушение авторских прав


Читайте в этой же книге: Структура программы. | Функция gets(). 3 страница | Функция gets(). 4 страница | Функция gets(). 5 страница | Функция gets(). 6 страница | Функция gets(). 7 страница | Целый тип данных | Указатели | Инициализация данных | Структуры |
<== предыдущая страница | следующая страница ==>
Создание библиотеки| Функция gets(). 2 страница

mybiblioteka.su - 2015-2024 год. (0.035 сек.)