tft每日頭條

 > 生活

 > c語言按照順序輸出數字

c語言按照順序輸出數字

生活 更新时间:2025-01-18 03:48:14

前言

習慣了使用C 之後是真的願意用cout代替printf,但是cout又不能像printf那樣可以]啊,%-5d這種,那麼可以淺用幾種方式來進行有效的格式表示。

setw

字段寬度。也就是說等同于]這種的存在的。

頭文件:#include<iomanip>

  1. cout << setw(5) << 123 << endl;
  2. cout << setw(5) << 123 << setw(3) << 45 << endl;
  3. cout << setw(5) << 123456 << endl;

c語言按照順序輸出數字(中的數字輸出格式)1

第一行的意思是:

一共占據5個空格區域,其中123貼在右側。

将會以:空空123的形式展示出來。

第二行想說明的的是:

setw必須是緊貼着要輸出的内容進行格式控制,setw 要輸出的内容,必須是在它的後面緊挨着。

123是5個空格空間,而後面的45就隻有3個空格空間而已。

将會以:空空123空45的形式顯示。

第三行想說明的是:

如果數字超過了控制範圍,那麼就都說沒控住...

還是會以正常的123456顯示。

————————————————

setfill

将空格填充為特定的字符,與setw配合使用。

要注意的是:首先填充的必須是字符,char類型。

其次,可以單獨使用。

cout << setw(5) << left << setfill('-') << 123 << endl;

cout << setw(5) << setfill('-') << 1.5 << endl;

cout << setw(6) << 100 << endl;

c語言按照順序輸出數字(中的數字輸出格式)2

那麼第一行結果就是:123--。

而第二行是:1.5--,小數點也會占據一個空格位置。

第三行我們并沒有指明setfill,但是輸出的結果卻是:100---。

那麼到這裡,結合剛才的left,也認為,setfill會改變輸出格式,隻不過改變的是此後的setw。

但是話說回來,你的left、right以及setfill,在沒有使用setw的情況下,對cout是沒影響的,因為不涉及到占位。

cout << setfill(' ') << right;//恢複原來的默認

cout << setw(6) << 100 << endl;

默認填充的是空格,以及右側貼靠,這樣就變回了原始的setw。

————————————————

setiosflags

設置指定标志。

這個需要很多參數,來組成不同的形式。

首先頭文件還是<iomanip>

但是在實際使用中發現,例如此後的内容fixed,我們寫:

setiosflags(ios::fixed)與直接寫fixed是一樣的。

cout << setiosflags(ios::fixed) << 123.456 << endl;

cout << fixed << 123.456 << endl;

————————————————

fixed/scientific

fixed指的是:流的格式化。

将流的格式設置為:fixed,意思是:

将一個浮點數表示為,一個定點整數和小數點和小數部分的格式。

值得注意的是,在C語言中,小數是默認是保留6位,但是C 可以直接輸出,省去了後面無意義的0,但是用了fixed之後,就又變成了123.456000。

double a = 123.456;

cout << a << endl;

cout << fixed << a << endl;

cout << a << endl;

c語言按照順序輸出數字(中的數字輸出格式)3

首先上文提到fixed與setiosflags(ios::fixed)是一樣的。

其次,我們發現,fixed改變了cout的輸出格式,但是僅限于double或float,int無效的,不會将100變成100.000000。

而scientific則是科學計數法,見名知意嘛。

cout << scientific << a << endl;

cout << a <<endl;

c語言按照順序輸出數字(中的數字輸出格式)4

這裡要提的是科學計數法的表示,就是e加上三個字符的表示,其中,符号占1位。

其次,scientific與fixed是一樣的,改變了cout。

那麼問題來了:咋變回去呢?

那麼就要用到resetiosflags了,這個貌似是不能省略的,不能像fixed一樣。

因為我們如果用了其他形式的輸出,是要恢複成原樣的。

cout << resetiosflags(ios::scientific);

//cout << resetiosflags(ios::scientific) << resetiosflags(ios::fixed);

cout << a <<endl;

就是将最後一次的修改變為正常,如果你忘了是改成什麼樣子了,可以兩個都反修改。

————————————————

setprecision

這個函數的意思是,保留多少位有效數字,例如123.456如果保留5位有效數字的話,就變成了:123.46,進行四舍五入。

這裡就可以講:如果我們想保留的是小數呢?

例如說是我想把123.456變成123.456000這種。

就要用fixed與setprecision相結合的方式。

double a = 123.456;

cout << setprecision(5) << a << endl;

cout << fixed << setprecision(5) << a << endl;

cout << resetiosflags(ios::fixed) << setprecision(5) << a << endl;

c語言按照順序輸出數字(中的數字輸出格式)5

如果不加,就是有效數字;如果加了,就是保留小數了。

第三行隻是将其改變回來正常的輸出。

hex/dec/oct

hex是十六進制,dec是十進制,oct是八進制。

先來句題外話,這個怎麼記住呢?我認為還是挺有意思的,這個好像是我考研英語老師講的。

說啊~在很久以前的國外是沒有一月和二月的(但是具體是因為什麼我不記得了...),因此以前是March是一月,那麼以這個邏輯以此類推,October就不是十月了,就是八月了,诶,你會發現,octopus意思是八爪魚,也是oct開頭,那麼oct就是八的前綴~

再推,December是十二月,變成了十月,decade意思是十年對吧,你看,dec就是十的前綴!

你看學到英語了還!

至于hex我不知道,貌似人家本身就有十六進制的意思,不過我記得hex好像是爐石裡薩滿的妖術那張牌...

言歸正傳!!!

int b = 55;

cout << b << endl;

cout << hex << b << endl;

cout << b << endl;

cout << oct << b << endl;

cout << dec;

cout << b << endl;

c語言按照順序輸出數字(中的數字輸出格式)6

我們的輸出默認是十進制dec,而如果加入了hex就變成了十六進制,55=0x37。

此時的cout完全變成了輸出十六進制,道理同fixed。

如果想恢複十進制隻需要cout<<dec;即可。

showbase

cout << hex << showbase << b << endl;

cout << hex << noshowbase << b << endl;

cout << dec << noshowbase;

c語言按照順序輸出數字(中的數字輸出格式)7

showbase意思是,如果不是十進制,那麼就把該數字的前綴顯示出來。

而我們默認是noshowbase,因此最後一樣的意思是回複原始。————————————————

left/right

setw默認的是靠近右側,但是如果想左側怎麼辦呢?cout << setw(5) << left << 123 << endl;

cout << setw(6) << 123 << endl;

cout << setw(5) << right << 123 << endl;

c語言按照順序輸出數字(中的數字輸出格式)8

使用std标準庫裡的left。

這裡要說明一下:我們可能看到的都是std::left,但是隻要我們把std命名空間在前面聲明打開了之後,直接使用left是可行的。

那麼輸出從空空123,變成了123空空。

第二行我們看到,并沒有輸入left,也是靠左側了!

這就是說明left(以及下面的right)直接改變了cout的輸出格式,使得以後的cout全部按照這種形式輸出。當然了,left和right僅适用于setw函數存在的情況。

right同理于left,但是我們默認就是右側,所以正常在沒有寫過左側的情況,是不用寫出來的,使用的意義可能在于恢複原始的右側對齊...

————————————————

總結

setprecision和setw的使用次數還是很多的,如果我們改變了cout,一定不要忘記改回來!

今天的分享就到這裡了~感謝大家~

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved