Попробуйте часть кода до слова main заменить на #include "stdafx.h" //1 #include <iostream> //2 using namespace std; //3 |
Системные данные числового типа
3.7. Примеры программ вывода числовых данных
Пример 1. Вывод однобайтовых числовых значений
#include <iostream.h> #include <stdio.h> #include <conio.h> int main() { char ch1 = 69; char ch2 = -128; unsigned char uch1 = 70; unsigned char uch2 = 129; __int8 i8_1 = 71; __int8 i8_2 = -127; printf("\nch1=%d ch2=%d",ch1,ch2); printf("\nuch1=%u uch2=%u",uch1,uch2); printf("\ni8_1=%i i8_2=%i\n",i8_1,i8_2); cout << "ch1=" << ch1 << endl; cout << "ch1=" << (int)ch1 << endl; cout << "ch2=" << ch2 << endl; cout << "ch2=" << (int)ch2 << endl; cout << "i8_1=" << i8_1 << endl; cout << "i8_1=" << (int)i8_1 << endl; cout << "i8_2=" << i8_2 << endl; cout << "i8_2=" << (int)i8_2 << endl; getch(); return 0; } //=== Результаты работы === ch1=69 ch2=-128 uch1=70 uch2=129 i8_1=71 i8_2=-127 ch1=E ch1=69 ch2=А ch2=-128 i8_1=G i8_1=71 i8_2=Б i8_2=-127
По результатам работы примера 1 видно, что форматный вывод однобайтовых числовых данных никаких затруднений не вызывает. Однако попытка вывести эти же значения в потоке без приведения значений символьных переменных к целочисленному типу (преобразование ( int )) разумных результатов не дает. Вместо этого в поток выводятся символы, коды которых совпадают с однобайтовыми числовыми значениями.
Пример 2. Вывод однобайтовых числовых значений
#include <stdio.h> #include <conio.h> int main() { char ch1 = -5, ch2 = -127; unsigned char uch1 = 25, uch2 = 255; printf("With sign :\n"); printf("-5=%3d(10) -127=%3d(10)",ch1,ch2); printf("\nOhne sign :\n"); printf("25=%#3o(8) %#3x(16) %3d(10)",uch1,uch1,uch1); printf("\n255=%#3o(8) %#3x(16) %3d(10)",uch2,uch2,uch2); getch(); return 0; } //=== Результаты работы === With sign : -5= -5(10) -127=-127(10) Ohne sign : 25=031(8) 0x19(16) 25(10) 255=0377(8) 0xff(16) 255(10)
В примере 2 однобайтовые числовые значения выданы по формату в виде десятичных, восьмеричных и шестнадцатеричных данных (основание системы записано в круглых скобках после самого значения).
Пример 3. Вывод коротких и длинных вещественных данных
#include <stdio.h> #include <conio.h> int main() { float f1=3.14159265, f2=20000000; double d1=3.14159265, d2=20E+125; printf("\nf1=%10.8f f2=%f", f1,f2); printf("\nf1=%e f2=%e", f1,f2); printf("\nf1=%g f2=%g", f1,f2); printf("\nd1=%12.9f d2=%g", d1,d2); printf("\nd1=%12.9e d2=%G", d1,d2); getch(); return 0; } //=== Результаты работы === f1=3.14159274 f2=20000000.000000 f1=3.141593e+00 f2=2.000000e+07 f1=3.14159 f2=2e+07 d1= 3.141592650 d2=2e+126 d1=3.141592650e+00 d2=2E+126
Пример 4. Управление форматом при выводе в поток
#include <iostream.h> #include <iomanip.h> #include <conio.h> int main() { int i=15, j=6, k; float v=1.23456, x=3.149; cout << hex; cout << "i=" << i << " j=" << j << " x=" << x << " v=" << v; cout.fill('*'); cout << "\ni=" << setw(6) << i << " j=" << j << endl; cout << setprecision(3) << x << " v=" << v << endl; cout.width(10); cout << x << ' ' << j << endl; for(k=0; k<8; k++) cout << setprecision(k) << v << endl; getch(); return 0; } //=== Результаты работы === i=f j=6 x=3.149 v=1.23456 i=*****f j=6 3.15 v=1.23 ******3.15 6 1.23456 1 1.2 1.23 1.235 1.2346 1.23456 1.23456