Программирование на языке Си. Разработка и отладка программ на персональном компьютере с использованием программного пакета Borland C++, страница 6

/*putsgets.cpp  Программа, демонстрирующая ввод –вывод  строк*/

#include<stdio.h>

main()

{

char name[20];                  //Переменная для имени

char full_name[60];           //Переменная для  полного имени (ФИО)

puts(“Введите ваше имя”);

gets(name);

puts(“Ввод подтверждается”);

puts(name);

puts(“Введите ваше ФИО ”);

gets(full_name);

puts(“Ввод подтверждается ”);

puts(full_name);

return 0;

}

Задание. Наберите текст программы и запустите ее. Объясните полученные результаты.

Функции форматированного ввода-вывода дают возможность  обрабатывать несколько элементов, выполняя, если необходимо, преобразование данных. Две функции – scanf() и printf() -     выполняют соответственно консольный ввод и вывод . Этим функциям передается переменное число аргументов, но первым аргументом всегда является текстовая строка. Она задает способ преобразования данных, ее часто называют форматной строкой. Функция printf() выдает на экран всю текстовую строку, в которой знак %…   заменяется символами вводимой информации. Символы после % рассматриваются как спецификация преобразования значения выводимой переменной. Имя переменной – это второй, третий и т. д. аргументы списка.

Наиболее употребляемые спецификации следующие:

%d – целое число,

%lg – длинное целое число,

%f – вещественное число.

%c – символ.

%s – строка символов.

%x – целое число в шестнадцатеричном формате.

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

Рассмотрим  простую программу.

/*print.cpp  Программа, демонстрирующая работу функции printf()  */

#include<stdio.h>

main()

{

int a=5, b=7, c;

c=a+b;

printf(“Сумма=%d\n”,c);

return 0;

}

Здесь символ \n используется для перехода на новую строку после вывода.

Задание. Наберите текст программы и запустите ее. Объясните полученные результаты.

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

Рассмотрим пример применения функции scanf(). Предыдущая программа print.cpp вычисления суммы годится только для одного конкретного случая. Улучшим эту программу, заменяя операторы присваивания вызовом функции scanf().

/*inout cpp  Ввод двух чисел и вывод  суммы*/

#include<stdio.h>

main()

{

int a, b, c;

printf(“Введите два целых числа : ”);

scanf(“%d  %d”,&a,&b);

c=a+b;

printf(“Сумма=%d\n”,c);

return 0;

}

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

Задание. Наберите текст программы и запустите ее. Объясните полученные результаты.

Рассмотрим еще более сложную программу, которая иллюстрирует возможности функций printf() и scanf().

/* inout2.cpp Программа, иллюстрирующая ввод-вывод*/

#include<stdio.h>

main()

{

char ch, name[80];

int i, j;

float x, x2;

printf(“Введите ваше имя: ”);

scanf(“%s”,name);

printf(“Здравствуйте,%s!Вас приветствует звонком компьютер\a\n”, name);

printf(“Введите любое целое число: ”);

scanf(“%d”,&i);

j=i+4;

printf(“%d+4=%d, верно?\n”, i, j);

printf(“Введите число с плавающей точкой: ”);

scanf(“%f”,&x);

x2=x*x;

printf(“%f в квадрате =%f, верно?\n”x, x2);

printf(“Введите любой символ: ”);

scanf(“%c”,&ch);

printf(“ASCII-код символа %c=%d(%#x)\n”, ch, ch, ch);

return 0;

}

Обратите внимание, что в строке

scanf(“%s”,name);

оператор получения адреса & не используется с именем строковой переменной name. Дело в том, что name - это фактически одномерный массив, а в языке Си имя массива является адресом его первого элемента.

В последней строке с функцией printf выражение %#x используется для вывода идентификатора шестнадцатеричной системы счисления 0x перед числом.