![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Спецификатор Тип выводимой информацииСодержание книги
Поиск на нашем сайте
%d,%i Десятичное целое число %c Один символ %s Строка символов %f,%F Число с плавающей точкой, десятичная запись %e,%E Число с плавающей точкой, экспоненциальная запись %u Десятичное целое число без знака. %o Восьмеричное число без знака. %x,%X Шестнадцатеричное число без знака.
Список_выражений в операторе вызова функции printf() может отсутствовать или включать объекты, значения которых должны быть выведены на экран. Это могут быть как собственно выражения, так и их частные случаи – константы и переменные. Количество элементов в списке вывода не фиксировано, но каждому элементу вывода должна соответствовать одна спецификация преобразования в форматной строке. Пример. int a = 5, b = 7; printf(“Результаты: \n”); printf(“сумма %d и %d равна %d\n”, a, b, a + b);
Кратко о необязательных полях спецификации преобразования: Флаги служат для выравнивания выводимых данных (минус – по левой границе поля вывода) и управления печатью знаков (пробел, +, –) перед числом. Пример. printf(“%-20s\n”, fio); Ширина определяет минимальную ширину поля вывода. Параметр игнорируется, если выводимое значение не помещается в отведённое поле. Пример. printf(“%5d”, 127); Точность задаёт количество цифр в дробной части числа с плавающей точкой; для символьных строк – максимальное число печатаемых символов. Пример. float z=123.4567; printf(“%8.2f”, z); printf(“%20.3s\n”, “математика”); Из модификаторов будем использовать только l для представления “длинных” типов (long, double)и L для long double. Пример. long alng=1234567890; double fdbl=987654321.12345678; printf(“%ld\t %lf\n”,alng, fdbl);
Ввод данных. Для ввода данных с клавиатуры будем использовать функцию:
scanf (форматная_строка, список_адресов_переменных);
Так же, как для функции printf(), для функции scanf() указываются форматная строка и следующий за ней список аргументов. Основное различие двух этих функций заключается в особенностях данного списка. Функция printf() использует в нём имена переменных, константы и выражения (в частности, строки символов), в то время как функция scanf() — только адреса переменных. Для определения адреса переменной перед её именем ставится знак & (это не касается имён массивов и строк символов). Спецификация преобразования чаще всего имеет вид:
%[ширина] [модификатор] спецификатор
Ширина определяет количество символов из входного потока, соответствующих вводимому значению (используется редко). Модификатор. Нами будет использован только модификатор l (см. описание функции printf()). Спецификаторы. Для ввода числовых данных чаще всего используют: %d, %u, %f, %e; для ввода символов - %с; для ввода строк - %s. Функция scanf() хорошо приспособлена для ввода десятичных целых и вещественных чисел. Она воспринимает пробельные символы (пробел, табуляция, перевод строки) как разделители между вводимыми числами. Если параметр спецификации преобразования “ ширина ” отсутствует, то при вводе числовых данных функция scanf() сканирует символы входного потока, игнорируя пробельные символы, выделяет непробельные символы и преобразует их (если среди них нет недопустимых символов для числа) в машинное представление согласно спецификации преобразования. При вводе символов согласно спецификатору %с любой символ входного потока считается значимым. А вот при вводе строковых данных по спецификатору %s выборка осуществляется до первого пробельного символа. Замечание. Ширину поля вывода и точность в спецификации формата можно задавать и с помощью переменных, значения которых определяются, быть может, в процессе выполнения программы. Для этого в спецификации формата вместо полей ширина и точность ставят символ *, которым в списке вывода соответствуют имена упомянутых переменных. Например, для вставки в поле вывода переменного количества пробелов перед выводом символа @ можно поступить следующим образом:
int W; printf ("Укажи количество пробелов "); scanf ("%d", &W); printf ("%*c", W, '@');
Следующий пример позволяет в момент выполнения программы указывать количество цифр в дробной части при выводе числа π.
#include <conio.h> #include<stdio.h> void main() { clrscr(); //Очистка экрана int width, precis; double pi=3.1415926536; printf("Введи ширину поля вывода "); scanf("%d",&width); printf("Введи точность "); scanf("%d",&precis); printf("pi= % *. * lf\n", width, precis, pi); getch(); }
Всё тот же символ *, используемый в качестве поля ширина в спецификации преобразования функции scanf(), позволяет игнорировать присваивания вводимых полей данных соответствующим переменным. Пример.
#include <conio.h> #include<stdio.h> void main() { clrscr(); //Очистка экрана int n; printf("Введи 3 целых числа "); scanf("%*d %*d %d",&n); printf("Последнее число есть %d\n ",n); getch(); }
Протокол работы программы:
Введи 3 целых числа 333 666 999 Последнее число есть 999
Некоторые экзотические возможности ввода данных с помощью функции scanf() (использование поля “ширина”, переменный формат и др. мы не рассматриваем).
Реализуем рассмотренный ранее пример вычисления площади и периметра треугольника с использованием ввода-вывода с стиле языка С.
#include <conio.h> #include <stdio.h> #include <math.h> void main() { float a,b,c,s,p; printf("Введи через пробел a, b\n "); scanf("%f %f",&a, &b); s = 0.5*a*b; c = sqrt(a*a + b*b); p = a + b + c; printf("Площадь = %10.2f\n",s); printf("Периметр = %10.2f\n",p); }
О проблеме вывода текста на русском языке.
В среде Windows при подготовке текстов программ для кодировки символов используется стандарт ANSI. Отладку и выполнение программ как в среде Visual Studio 2008 (2010), так и в среде Borland C++ Builder мы собираемся осуществлять в режиме консольных приложений. Но дело в том, что в режиме консольного приложения используется кодировка символов в стандарте ASCII. Что касается кодировки латиницы, то она одинакова и в ASCII, и в ANSI, а вот кодировка кириллицы различна. Именно этим и объясняется, что в ранее приведенных примерах вместо нормальных фраз русского языка на экран выводятся какие-то странные символы. Для вывода на экран сообщений на русском языке в среде Visual Studio 2008(2010) воспользуемся следующим приемом. Сначала выполним так называемую локализацию выходного потока с установкой кодовой страницы России:
wcout.imbue (locale (“rus_rus.866”));
После этого всюду в тексте программы для вывода строки символов на русском языке будем использовать объект wcout вместо cout с символом L перед строкой-литералом:
wcout << L”Добро пожаловать в Visual Studio 2010”<<endl;
Гораздо удобней для вывода на экран сообщений на русском языке в среде Visual Studio 2008 выполнить локализацию выходного потока с установкой кодовой страницы России следующим образом:
setlocale (NULL, “.1251”);
После этого вывод текста на русском языке всеми доступными средствами осуществляется уже без проблем (в частности, оператором cout), например:
cout << ”Добро пожаловать в Visual Studio 2008”<<endl; puts (”Добро пожаловать в Visual Studio 2008”);
К сожалению, теперь возникают проблемы со вводом текста на русском языке.
Еще один вариант вывода (и ввода!) текста на русском языке: выполнить локализацию выходного потока с установкой кодовой страницы России следующим образом: system("chcp 1251"); После запуска программы на выполнение следует щелкнуть в левом верхнем углу, выбрать СВОЙСТВА ->ШРИФТЫ с ТОЧЕЧНЫХ заменить на LUCIDA CONSOLE.
Для нормального вывода на экран фраз на русском языке в среде Borland C++ Builder 6 будем использовать готовую функцию rus() (см. ниже), которая используется для перекодировки ANSI-строки в ASCII-код для вывода сообщений на русском языке. И хотя, быть может, эта функция не очень понятна (т.к. мы еще не изучали указатели), будем смело использовать её в наших программах, предварительно подключив её код с помощью препроцессорной команды, например:
#include "d:\\My_C_Builder_6\\rus.h" Здесь мы явно указали путь к каталогу, где постоянно хранится функция rus().
Рассмотрим снова пример, уже обсуждавшийся ранее (см. раздел 1. “ Структура программ на языке C/C++”).
// Программа отлажена в Borland C++ Builder 6 //---- используется функция rus перекодировки ANSI-строки --- // в ASCII-код для вывода сообщений на русском языке #pragma hdrstop #include <stdio.h> #include <iostream.h> #include <conio.h> const double PI=3.14159; #define DEZL "C++ - это круто!"
#pragma argsused
#include "d:\\My_C_Builder_6\\rus.h"
int main() { char name[15]; int r; double c, s; clrscr(); cout<<rus(DEZL)<<endl; cout<<rus("Как тебя зовут? "); cin>>name; cout<<rus("Привет, ")<<name<<endl; cout<<name<<rus(", введи радиус ==>"); cin>>r; c= 2*PI*r; s=PI*r*r; cout<<rus(" Площадь круга = ")<<s<<'\n'; cout<<rus(" Длина окружности = ")<<c<<'\n'; getch(); return 0; }
/* char* rus(char* st) //функция rus { unsigned char* p = st; // при объявлении символов как char русские // буквы кодируются отрицательными числами while (*p) { if (*p >= 192) // здесь русская буква if (*p <= 239) // А,Б,... Я,а,б,... п *p -= 64; else // р...я *p -= 16; p++; } return st; } */
|
|||||||
Последнее изменение этой страницы: 2016-12-16; просмотров: 472; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.131.37.220 (0.01 с.) |