Неинициализированные переменнее 


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



ЗНАЕТЕ ЛИ ВЫ?

Неинициализированные переменнее



 

Может получиться так, что переменной, которая определена в тексте программы, так никогда и не присваивается никакое значение. Это может произойти по причине того, что функция scanf() прервала работу, либо потому, что вы забыли написать инструкцию ввода значения для этой переменной. Могут быть и другие причины. Если переменную, которой не присвоено значение, использовать в инструкциях вывода данных, компилятор может не сообщить об ошибке, но отображенная на дисплее информация будет лишена смысла. Почему это происходит?

При включении компьютера области памяти, которые не используются опера­ционной системой, заполнены случайными данными. Когда С++ резервирует память для переменных при их определении, то содержимое этих областей памяти не меняется до тех пор, пока переменная не инициализирована или пока ей не присвоены введенные данные. Поэтому, если в программе в качестве параметра функции вывода используется переменная, которой не было присво­ено к этому моменту никакого значения, на экране появятся те случайные данные, что все еще хранятся в памяти. Но это еще не самое худшее. Если подобная переменная используется при расчетах, компилятор С++ тоже не сообщит об ошибке, но при этом все полученные результаты будут лишены смысла, а поскольку вы не были предупреждены о том, что произошло, вы можете принять их как вполне достоверные.

Чтобы избежать неприятностей, многие программисты присваивают начальные значения всем переменным. Можно присвоить ноль в качестве начального значения числовой переменной и пробел символьной и строковой переменным:

int count = 0;

char initial = ' ';

float rate = 0.0;

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

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

В табл. 6 собраны все средства ввода данных, о которых говорилось в этой главе.

 

Функция вывода cout

 

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

В С++ существует стандартный поток вывода cout, позволяющий в сочетании с двумя символами «меньше» («), которые называются оператором вставки, отображать литералы или значения констант и переменных без использования указателей формата.

Если у вас есть компилятор С++, посмотрите документацию к нему. Не исключено, что необходим специальный файл заголовков для того, чтобы иметь возможность использовать преимущества стандартного потока вывода cout и стандартного потока ввода cin (о нем вы прочтете в следующей главе).

 

Таблица 6

 

Основные средства ввода данных в языке Си/Си++

 

Функция Тип данных Комментарии
gets() Только строки Си и Си++. Используется для ввода строк, возможно наличие пробелов. По­сле ввода данных необходимо нажать Enter.  
getchar() Единичные символы Си и Си++. Используется для ввода единичных символов в переменную, определенную как int или char. После ввода символа не надо нажимать Enter. Используется без параметров в качестве переменной (например, letter=getchar()) или сама по себе для временной оста­новки программы.  
scanf() Все типы данных Си и Си++. Требует указателей формата для каждого элемента вводимых дан­ных. Не используется для ввода строк, имеющих пробелы. Необходимо сле­дить за правильностью формата вводи­мых данных. Может иметь несколько аргументов. Перед переменной типа char нельзя ставить пробел.
cin Все типы данных Только Си++. Не нуждается в указа­телях формата и операторе получения адреса. Может вводить значения для нескольких аргументов. Аргументы от­деляются операторами».

 

Для некоторых компиляторов, например, необходимо включить файл STREAM. H с помощью директивы #include в начале программы.

 

 

Рис. 5. Стандартный поток вывода.

 

Структура инструкции, использующей cout, показана на рис. 5. После cout надо ставить два знака <. Они указывают cout отобразить помещенную после них информацию. Информация может быть представлена в виде литерала (тогда ее заключают в кавычки) либо имени константы или переменной.

Рассмотрим инструкцию

cout<<"Привет, меня зовут Сэм. Мы с вами уже встречались";

При ее выполнении произойдет вывод на дисплей строки, заключенной в кавычки. Инструкция

int count;

count = 4509;

cout<<count;

отобразит значение переменной с именем count – число 4509.

Используя один стандартный поток вывода cout, можно отобразить несколько аргументов. Между собой аргументы разделяются операторами вставки, как это продемонстрировано на рис. 6. Например, инструкция

int age;

age = 43;

cout «"Вам исполнилось " «age «" года.";

отображает текст

Вам исполнилось 43 года.

 

 

 

Рис. 6. Вывод нескольких аргументов с помощью cout

 

 

Стандартный поток вывода cout отображает каждый пункт, указанный с по­мощью оператора вставки, в том порядке, в каком они записаны в инструкции.

Так же, как и функция printf(), cout не добавляет никаких команд новой строки после отображения данных. Чтобы перейти к новой строке, там, где вы хотите ее начать, надо добавить управляющий код \n, как это показано на рис. 6.

Стандартный поток вывода cout не требует обязательного использования указа­телей формата, но позволяет их ввести. С помощью указателей формата можно определять ширину поля, количество пробелов и число знаков после точки в вещественных числах. Описание форматирования вывода при использовании cout не входит в задачу этой книги. Если у вас есть компилятор Си++, вы можете подробно прочитать об этом в его описании. Не забудьте посмотреть в документа­ции, надо ли включать специальные файлы заголовков при использовании cout.

Одна из особенностей языка С++ - так называемая перегрузка – делает необязательным использование указателей формата. В отличие от функции printf(), которая требует обязательного указания формата данных, cout при передаче параметров сам определяет формат на основании типа получаемых данных. Этот процесс и называется перегрузкой.

 

Таблица 7

Средства вывода информации в языке С++.

 

Функция или ключевое слово Тип данных Комментарии
puts() только строки С и С++. Используется только для вывода строк. Выводит строковые литералы в кавычках, значения переменных и констант. Может автоматически перемещать курсор на следующую строку после вывода (не забудьте проверить документацию).
putchar() единичный символ С и С++. Используется для вывода символа, определенного как char или int. Не переводит курсор на следующую строку автоматически (проверьте документацию). Используйте для вывода литералов в одинарных кавычках, констант, переменных типа char, специальных символов или escape-последовательностей.
printf() все типы данных С и С++. Необходимы указатели формата для каждого элемента данных. Может обеспечить вывод нескольких аргументов. Не переводит курсор автоматически, используйте escape-последовательность \n.
cout все типы данных Только С++. Отделяйте аргументы знаками <<. Не переводит курсор автоматически. Указатели формата не обязательны

 

 

ОПЕРАЦИИ И ВЫРАЖЕНИЯ

 



Поделиться:


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

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