Язык Си - [26]

Шрифт
Интервал

.

     2. Если вы хотите ввести значение строковой переменной, использовать символ & не нужно.


Приведем правильную программу:

main( )

{

int age;

float assets;

char pet [30];

printf(" Укажите ваш возраст, состояние и любимое животное.\n" );

scanf(" %d  %f" , &age, &assets);

scanf(" %s" , pet);  /* & отсутствует при указании массива

символов */ printf("%d  $%.0f  %s\n", age, assets, pet);

}

Вот пример диалога:

Укажите ВАШ ВОЗРАСТ, состояние и любимое животное.

82

8345245.19  носорог

82  $8345245  носорог

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

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

     1. Отсутствует спецификация %g.

     2. Спецификации %f и эквивалентны. Обе спецификации до пускают наличие (или отсутствие) знака, строки цифр с десятичной точкой или без нее и поля показателя степени.

     3. Для чтения целых чисел типа short применяется спецификация %h.

     Функция scanf( ) не является одной из наиболее часто используемых функций языка Си. Мы обсуждаем ее здесь главным образом из-за ее универсальности (она позволяет читать данные всех имеющихся типов); однако в Си имеется еще несколько других функций, осуществляющих ввод, например getchar( ) и gets( ), которые более удобны для выполнения конкретных задач - чтения одиночных символов или строк, содержащих пробелы. Мы рассмотрим некоторые из этих функций в гл. 6, 13 и 15.

СОВЕТЫ ПО ПРИМЕНЕНИЮ

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

printf(" %d %d %d\n" , val1, val2, val3);

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

12  234  1222

4  5  23

22334  2322  10001

(Здесь предполагается, что между обращениями к оператору печати значения переменных изменялись.)

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

printf( %9d %9d %9d\n" , val1, val2, val3);

результат будет выглядеть так:

      12     234    1222

        4         5        23

22334   2322  10001

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

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

     С другой стороны, если печатаемое число включено в некоторую фразу, то часто при его выводе оказывается удобным задать поля равной или меньше требуемой. Это дает возможность включить число в фразу без добавления лишних пробелов. Например, результатом работы оператора:

printf(" Скороход Беппо пробежал %.2f мили за 3 ч.\n", distance);

могла бы быть следующая фраза:

Скороход Беппо пробежал 10.22  мили за 3 ч.

Изменяя спецификацию преобразования на %10.2f, получим

Скороход Беппо пробежал                  10.22 мили за 3 ч.

ЧТО ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ

Что такое строка символов: несколько символов, расположенных в ряд.

Как записывать строку символов: " несколько символов, расположенных в ряд".

Как строка хранится в памяти: " несколько символов, расположенных в ряд\0".

Где разместить строку: char phrase[25] или static char phrase[25].

Как определить длину строки: использовать функцию strlen(строка).

Как распечатать строку: printf(" %s", phrase).

Как прочитать строку, состоящую из одного слова: scanf(" %s " ,&name).

Как задать числовую константу: #define TWO 2.

Как задать символьную константу: #define WOW '!'.

Как задать строковую константу: #define WARN "He делай этого!".

Спецификации преобразования при вводе-выводе: %d %f %e %g %c %s %u % o %х.

Как улучшить вид входной информации: %-10d %3.2f.

Как выполнять преобразования: printf(" %d %о %c\h", WOW, WOW, WOW);

ВОПРОСЫ И ОТВЕТЫ

Рассмотрение приводимых ниже вопросов должно помочь вам глубже УСВОИТЬ материал данной главы.

Вопросы

1. Выполните снова программу, приведенную в начале данной главы, но на этот раз в ответ на вопрос о вашем имени введите имя и фамилию. Что произойдет? Почему?


2. Что выведет на печать каждый из нижеприведенных программных фрагментов в предположении, что они являются частью некоторой полной программы?


Еще от автора Митчел Уэйт
Язык программирования C [Лекции и упражнения, 6-е изд.]

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


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

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