C(C++)輸入輸出格式

c&c++輸入輸出控制格式ios

許多狀況下,都須要控制輸出結果的表現形式。如輸出寬度、輸出精度、輸出格式等。C++的iomanip.h中定義了許多控制符,這些控制符能夠直接插入到流中,控制數據的輸出格式。控制符有兩種:控制常量和控制函數,控制常量定義在iostream.h中,控制函數定義在iomanip.h中。c++

 

經常使用控制符在iostream.h中,函數控制符在iomainip.h中。函數

控制符                                      描述spa

dec                                        10進制設計

hex                                        16進制3d

oct                                         8進制code

setfill(c)                               設填充字符爲cblog

setprecision(n)                     設置顯示小數精度爲n位ip

setw(n)                               設域寬爲n個子符內存

setiosflags(ios::fixed)           小數方式表示

setiosflags(ios::scientific)       指數表示

setiosflags(ios::left)              左對齊

setiosflags(ios::right)            右對齊

setiosflags(ios::skipws)         忽略前導空白(用於輸入)

setiosflags(ios::uppercase)            16進制數大寫輸出

setiosflags(ios::lowercase)             16進制數小寫輸出

注意:除了setw(n)控制符以外,其餘控制符對後面的全部輸出起控制做用,直到改變輸出格式爲止。

 

 

例一、輸出8進制和16進制數

常量dec、hex和oct用來控制必須按10進制、16進制或8進制形式輸出。

1 #include<iostream>
2 using namespace std; 
3 int  main()
4 {
5     int  number=15;
6     cout<<dec<<number<<"\n"<<hex<< number<<"\n"<<oct<<number<<"\n";
7     return 0;
8 }

結果爲:

15
f
17

注意:因爲這三個標識符已經被定義爲系統常量,注意不能在定義爲其餘變量使用。

上面這段代碼沒有加#include<iomanip>也能正確運行,可是假如想下面這一段代碼使用了setw就要加這個類引用了。

 

例二、設置值的輸出寬度

函數setw(n)用來控制輸出寬度,若是數據實際寬度大於設置寬度,將按實際寬讀輸出;若是設置寬度大於實際輸出寬度,數據輸出時將在前面補相應數量的空格。另外,該控制符只對一次輸出起做用。

1 #include <iostream>
2 #include <iomanip>
3 using namespace std; 
4 int  main( )
5 {
6    int number=1234;
7    cout<<setw(5)<<number<<setw(5)<<564<<endl;
8    return 0;
9 }

運行結果:

_1234_ _564

 

例三、設置填充字符

setfill(c)函數用來設置填充的字符,默認狀況下爲空格。

1 #include <iostream>
2 #include <iomanip>
3 using namespace std; 
4 int main()
5 {
6    int  number=1234;
7    cout <<setfill('*')<<setw(5)<<number<<endl;
8    return 0;
9 }

輸出結果:

*1234

 

例四、設置對齊格式

函數setiosflags(ios::left)和setiosflags(ios::right)用來控制輸出左右對齊格式。當數據實際寬度小於輸出寬度時該控制才起做用。默認狀況下數據輸出是右對齊。

 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std; 
 4 int  main()
 5 {
 6     int  number=1234;
 7     cout<<setiosflags(ios::left)<<setfill('*')<<setw(6)<<number<<endl;
 8     cout<<setiosflags(ios::right)<<setfill('*')<<setw(6)<<number<<endl;
 9     return 0;
10 }

輸出結果:

1234**

**1234

 

例五、控制浮點數顯示

函數setprecision(n)可用來控制輸出流顯示浮點數的數字個數(整數部分加小數部分)。

c++默認的流輸出數值的有效位是6。當小數截短顯示時,進行四捨五入處理。

函數setiosflags(ios::fixed)用來控制符點數是按純小數方式顯示。系統默認爲純小數方式輸出。

函數setiosflags(ios::scientific)用來控制符點數是按科學記數法方式顯示。

函數setiosflags(ios::showpoint) 用來強制顯示小數點和符號。

 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std; 
 4 int main()
 5 {
 6     const float  x=20.0/7,y=18.0/6;
 7     
 8     cout<<"x:\n";
 9     cout<<x<<endl;
10     cout<<setiosflags(ios::scientific)<<x<<endl;
11     cout<<setiosflags(ios::fixed)<<x<<endl;
12     
13     cout<<"\ny:\n";
14     cout<<y<<endl;
15     cout<<setiosflags(ios::showpoint)<<y<<endl;
16     return 0;
17 }

輸出結果爲:

2.85714         (默認6位,整數部分加小數部分)

2.857143e+000        (默認6位,指小數部分)

3              (默認0不輸出)

3.00000         (強制輸出0)

 

 

標準輸入輸出函數printfscanf

在程序設計中輸入輸出是不可缺乏的內容,所以在C語言中提供了printf與scanf標準函數來知足輸入輸出要求。須要說明的是,在C++中提供了更方便的輸入輸出控制,這就是I/O流。但爲了知足一些對printf與scanf使用習慣的要求,C++中仍保留了這兩個函數。

<1>、printf函數

格式:

printf (格式控制字符串,輸出項1,輸出項2,…)

說明:

(1)格式控制字符串決定了數據輸出的結果。它由「格式說明字符」和「普通字符」組成。普通字符按原樣輸出,格式說明字符將對應輸出數據轉換成指定的格式輸出。格式控制字符串的形式爲:

%[域寬]格式字符

域寬部分是可選的,每一個格式說明對應於一個輸出參數,該參數被轉換成由格式說明規定的數據格式後輸出。

例如:

 1 #include <iostream>
 2 #include <iomanip>
 3 using namespace std; 
 4 int main()
 5 {
 6     int a=10;
 7     float b=-5.2;
 8     printf("a=%d,b=%8.3f\n",a,b);
 9     return 0;
10 }

輸出結果以下:

a=10,b=  -5.200

(2)格式說明字符及其規定的輸出格式

printf的格式說明字符見下表

格式說明符     參數類型     輸出格式

d,I            int           十進制整數

o              int           八進制數(無前導0)

x,X           int           十六進制數(無前綴0x或0X)

u              int            無符號十進制數

c              int            單個字符

s              char *       字符串(必須以’\0’結束或給定長度)

f               double      小數形式的的浮點數(小數位數由精度決定,缺省爲6位)

e,E           double       標準指數形式的浮點數(小數位數由精度決定,缺省爲6位)

%             不轉換        輸出一個%

域寬說明字符      意義

-                 在指定的區域內以左對齊方式輸出(無’-’號時爲右對齊)

+                 輸出正值時前面冠以符號+

空格              輸出的第一個字符不是符號時,要輸出一個空格作前綴

0(零)           在域寬範圍內用前導0填補空位

#                 對於o格式輸出前導0,對於x或X輸出0x或0X前綴。

m(正整數)         指出輸出數據的最小寬度。

.(小數點)          分隔域寬與精度,小數點前面能夠沒有與寬說明

n(正整數)          數據輸出的精度即小數部分的位數,

h                 指出輸出數據是短整型

l                  指出輸出數據是長整型

L                  指出輸出數據是高精度浮點型(long double)

 

例1

1 #include<stdio.h>
2 int main()
3 {
4     int a=10;
5     float b=-5.2;
6     printf("a=%#o,b=%08.3f",a,b);
7     return 0;
8 }

輸出結果爲:

a=012,b=-008.200

 

例2

1 #include<stdio.h>
2 int main()
3 {
4     int a=28,b=38;
5     long c=289868;
6     printf("%5d,%5d\n%ld\n",a,b,c);
7     printf("%3ld\n%7ld\n%d\n",c,c,c);
8     return 0;
9 }

結果:

28,   38

289868

289868

 289868

289868 //16位機輸出27724

 

例3

1 #include<stdio.h>
2 int main()
3 {
4     int a=-3;
5     printf("%d,%o,%x,%X,%6x\n",a,a,a,a,a);
6     return 0;
7 }

 

在16位機上輸出結果爲:

-3,177775,fffd,FFFD,fffd

在32位機上輸出結果爲:

-3,37777777775,fffffffd,FFFFFFFD,fffffffd

 

例4

1 #include<stdio.h>
2 int main()
3 {
4     char ch='a';
5     int a=65;
6     printf("%c,%d,%3c\n",ch,ch,ch);
7     printf("%c,%d,%3d\n",a,a,a);
8     return 0;
9 }

輸出結果爲:

a,97,  a

A,65, 65

 

例5

1 #include<stdio.h>
2 int main()
3 {
4     printf("%3s,%-5.3s,%5.2s\n","hello","hello","hello");
5     return 0;
6 }

輸出結果爲:

hello,hel  ,   he

說明:第一個"hello"按%3s輸出,因爲"hello"長度超過3,所以按實際長度輸出。第二個"hello"輸出寬度爲5,且從前面截取3個字符左對齊輸出,第三個"hello"的輸出寬度仍爲5,從"hello"中截取2個字符右對齊輸出。

 

<2>scanf函數

通常形式:

    scanf(格式控制字符串,地址1,地址2,…);

說明:格式控制字符串同前面的printf函數。地址是指變量的地址,格式是變量的前面加&符號。

例如:

1 #include<stdio.h>
2 int main()
3 {
4     int i;
5     printf("please input i:\n");
6     scanf("%d",&i);
7     printf("i=%d\n",i);
8     return 0;
9 }

 

變量的定義與初始化

看下面例子:

 1 #include<iostream>
 2 using namespace std;
 3 int  main()
 4 {
 5     int  num;
 6     char  ch='a';
 7     for (num=ch;num<='z';num++)   
 8         cout<<num<<",";
 9     return 0;
10 }

程序輸出什麼結果?

答:將輸出97,98,...,122

 

在c++中,任何一個變量在被引用以前必須被定義。

c++中變量能夠在程序中隨時定義,沒必要集中在程序以前。

定義格式:

〈類型〉〈變量名錶〉;

當有多個變量時,其間用逗號隔開。

例如:

int  i,j,k;
float  x,y,z;
char  c1,c2,c3;

注意:在同一個內存塊中不容許定義同名變量,即不容許重複定義一個變量。

變量在定義時可直接給變量一個初始值,稱爲變量初始化。變量初始化也可放在須要的時候進行。變量被初始化後其值將保存到被改變爲止。變量定義之後,若是沒有被初始化,並不意味着這個變量中沒值,該變量中要麼是默認值,要麼是無效值。在後面將要講到,對外部和靜態變量定義後其默認值對int型的爲0,對浮點型的爲0.0;對char型爲空。而其餘內部變量未初始化時其值是無效的,這是由於該變量所在地址中的內容是先前保留下來的無心義的值。在定義變量時可一次初始化多個變量。

例如:

float  x,y=3.14,z=0.0;

char  ch1='a', ch2='\n';

這裏,y,z,ch1,ch2在定義的同時就進行了初始化。

而x只是作了變量說明並無賦初值。

相關文章
相關標籤/搜索