Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 463; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.13.244 (0.008 с.) |