Ключевые понятия

Лекция №4 Символьные строки и форматированный ввод-вывод

 

Ключевые понятия

В языке С тип char представляет единичный символ. Для представления последовательности символов в С используются символьные строки. Одной из форм строки является символическая константа, в которой символы заключены в двойные кавычки; примером может служить строка "Удачи, друзья!". Вы можете хранить строку в массиве символов, который размещается в смежных байтах памяти компьютера. Символьные строки, выраженные как символические константы либо хранящиеся в массиве символов, оканчиваются символом, который не выводится на печать и называется нулевым (null) символом. Плодотворной оказалась идея представлять числовые константы в программе символическими, либо посредством директивы #define, либо с помощью ключевого слова const. Символические константы делают программу удобочитаемой и легкой для сопровождения и внесения изменений. Стандартные функции ввода и вывода scanf() и printf() языка С используют систему, в которой вы должны согласовать спецификаторы в первом аргументе со значениями в последующих аргументах. Согласование, скажем, спецификатора типа int, такого как %d, со значением float приводит к непредсказуемым результатам. Вы должны внимательно следить за тем, чтобы количество и типы спецификаторов были согласованы с остальными аргументами функций. Что касается функции scanf(), то не забывайте проставить перед именем переменной префикс в виде адресной операции (&).

Пробельные символы (символы табуляции , пробела и новой строки) играют решающую роль в том, как scanf() видит данные ввода. За исключением режима ввода, задаваемого спецификатором %с (который читает только следующий символ), при чтении входных данных функция scanf() пропускает все символы пробела до первого не пробельного символа. Далее она продолжает чтение символов до тех пор, пока не обнаружит пробельный символ либо пока не обнаружит символ, имеющий тип, отличный от заданного. Теперь поcмотрим, что происходит, если мы подадим на ввод одну и ту же строку, но при различных режимах работы функции scanf(). Начнем со следующей входной строки:

-13.45е12# 0

Прежде всего , предположим , что используется режим %d; в этом случае функция scanf() прочтет три символа (-13) и остановится на точке, рассматривая ее как следующий входной символ. Затем функция scanf() преобразует последовательность с имволов -13 в соответствующее целочисленное значение и сохраняет его в переменной назначения типа int. Далее, в режиме %f функция scanf() читает ту же строку как последовательность с имволов -13.45Е12 и останавливает чтение на символе # , оставляя его для следующей операции ввода. Затем она преобразует последовательность символов -13.45Е12 в соответствующее значение с плавающей запятой и сохраняет его в переменной типа float. Читая ту же строку в режиме %s, функция scanf() прочитает последовательность символов -13.45Е12 и останавливается на пробеле, оставляя его для следующей операции ввода. Затем она сохраняет коды всех этих десяти символов в массиве назначения, добавив в конец массива нулевой символ. Наконец, при чтении этой же строки в режиме %s функция scanf() прочтет и сохранит первый символ, в данном случае это пробел.