|
Попробуйте часть кода до слова 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