目錄
1.cout和i/i++/++i的組合使用
2.用不同進制輸出數字
方法一:用控制符 dec(十進制),hex(十六進制),oct(八進制)
方法二:使用setbase(n)
3.調整欄位寬度
width函式將長度不同的數字放到寬度相同的欄位中,該方法原型為:
int width()
也可以使用setw(int n)來設定輸出域寬,
填充字符
4.設定浮點數的顯示精度
方法一:
方法二:
列印末尾的0和小數
1.cout和i/i++/++i的組合使用
i++ 和 ++i 是有著不同的含義,和 cout 組合使用也會得到不同的結果,下面給出一段代碼:
#include <iostream>
using namespace std;
int main(){
int i = 1;
cout << ++i << i++ << i << i++ << ++i << endl;
return 0;
}
這段代碼的結果是多少呢?
A.23345
B.22335
C.54535
D.53525
…
我們不妨先理解一下 cout 輸出控制臺的程序,看下面這幅圖:
根據運算式來看, endl 會作為一個可以供 cout 接收的物件往前傳,而 ++i 和 endl 結合起來作為一個可以供 cout 接收的物件往前傳,依次遞推下去,物理實作上需要一個堆疊來保存可以供 cout 接收的物件,然后從右向左放到這個堆疊里,然后依次彈出輸出在螢屏上,其中, i 和 ++i 會在堆疊里面保存 i 的參考,而 i++ 會在堆疊里面保存數字,程序如下:
第一步:將 endl 壓入堆疊中, i 值不變;
第二步:將 i 的參考壓入堆疊中, i 的值加 1 變成 2(因為是 ++i );
第三步:將 2 壓入堆疊中, i 的值加 1 變成 3(因為是 i++ );
第四步:將 i 的參考壓入堆疊中, i 的值不變(因為是 i );
第五步:將 3 壓入堆疊中, i 的值加 1 變成 4(因為是 i++ );
第六步:將 i 的參考壓入堆疊中, i 的值加 1 變成 5(因為是 ++i );
第七步:將堆疊里的資料依次彈出,即可得到 53525 ,(因為i的值是 5 ,所以所有 i 的參考都是 5 )
————————————————
以上為CSDN博主「九霄星河」的原創文章,我整理一下作為筆記
原文鏈接:https://blog.csdn.net/qq_35481167/article/details/82792103
2.用不同進制輸出數字
方法一:用控制符 dec(十進制),hex(十六進制),oct(八進制)
#include <iostream>
using namespace std;
int main()
{
int chest = 42; // decimal integer literal
int waist = 0x42; // hexadecimal integer literal
int inseam = 042; // octal integer literal
cout << "Monsieur cuts a striking figure!\n";
cout << "chest = " << chest << " (42 in decimal)\n";
cout << "waist = " << waist << " (0x42 in hex)\n";
cout << "inseam = " << inseam << " (042 in octal)\n";
chest = 42;
waist = 42;
inseam = 42;
cout << "Monsieur cuts a striking figure!" << endl;
cout << "chest = " << chest << " (decimal for 42)" << endl;
cout << hex; // manipulator for changing number base
cout << "waist = " << waist << " (hexadecimal for 42)" << endl;
cout << oct; // manipulator for changing number base
cout << "inseam = " << inseam << " (octal for 42)" << endl;
// cin.get(); //有些設備的運行視窗只彈出一下,加上該句可以讓視窗停留
return 0;
}
運行結果:

在默認情況下,cout以十進制格式顯示整數
其中,oct 是八進制輸出, dec 是十進制(效果和默認一樣), hex 是十六進制輸出(字母默認是小寫字母),這兩個也包含在 std 中,即其全稱分別是 std::oct 、 std::dec 、 std::hex ,這三個控制符包含在庫 < iostream > 中,
注意:默認格式為十進制,在修改格式之前,原來的格式將一直有效,(修改后的格式一直有效,直到更改它為止)
方法二:使用setbase(n)
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
int i = 123456;
cout << i << endl;
cout << dec << i << endl;
cout <<"八進制:" << oct << i << endl;
cout <<"十六進制(小寫字母):" << hex << i << endl;
cout << setiosflags(ios::uppercase);
cout <<"十六進制(大寫字母):" << hex << i << endl;
cout <<"八進制:" << setbase(8) << i << endl;
cout <<"十六進制:" << setbase(16) << i << endl;
}

setbase(n) 表示以 n 進制顯示,包含在庫 < iomanip > 中,n 只能取 8, 10, 16 三個值,
setiosflags(ios::uppercase) 表示將字母大寫輸出,包含在庫 < iomanip > 中,
以上均包含在std 命名空間中,
3.調整欄位寬度
width函式將長度不同的數字放到寬度相同的欄位中,該方法原型為:
int width()
int width(int i)
第一種格式回傳欄位寬度的當前設定;第二種格式將欄位寬度設定為i個空格,并回傳以前的欄位寬度值,這使得能夠保存以前的值以便恢復寬度值時使用,
注意:width()方法只影響接下來顯示的一個專案,然后欄位寬度將恢復為默認值,
#include <iostream>
using namespace std;
int main()
{
int w = cout.width(30);
cout << "default field width = " << w << ":\n";
int a;
cout.width(10);
cout <<cout.width(10) <<endl; //回傳當前欄位的寬度
cout.width(5);
cout << "N" <<':';
cout.width(8);
cout << "N * N" << ":\n";
for (long i = 1; i <= 100; i *= 10)
{
cout.width(5);
cout << i <<':';
cout.width(8);
cout << i * i << ":\n";
}
return 0;
}

也可以使用setw(int n)來設定輸出域寬,
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
cout << 's' << setw(8) << 'a' << endl; //s與a之間有7個空格
cout << 's' << setw(3) << 'abcd' << endl;
}

setw()只對其后面緊跟的輸出產生作用,如上例中,表示’a’共占8個位置,不足的7個位置用空格填充,
若緊跟的輸出的內容超過setw()設定的長度,輸出結果存在問題,
填充字符
在默認情況下,cout用空格填充欄位中未被使用的部分,可以用fill()成員函式來改變填充字符,
控制符包含在庫 < iomanip > 中,std 命名空間中,
#include <iostream>
using namespace std;
int main()
{
cout.fill('*');
const char * staff[2] = { "Waldo Whipsnade", "Wilmarie Wooper"};
long bonus[2] = {900, 1350};
for (int i = 0; i < 2; i++)
{
cout << staff[i] << ": $";
cout.width(7);
cout << bonus[i] << "\n";
}
return 0;
}

注意:與欄位寬度不同的是,新的填充字符將一直有效,直到更改它為止,
4.設定浮點數的顯示精度
方法一:
C++的默認精度為六位(但末尾的0將不顯示),precision()成員函式使得能夠選擇其他值,與fill類似,新的精度設定將一直有效,直到被重新設定,
#include <iostream>
using namespace std;
int main()
{
float price1 = 20.40;
float price2 = 1.9 + 8.0 / 9.0;
cout << "\"Furry Friends\" is $" << price1 << "!\n";
cout << "\"Fiery Fiends\" is $" << price2 << "!\n";
cout.precision(2);
cout << "\"Furry Friends\" is $" << price1 << "!\n";
cout << "\"Fiery Fiends\" is $" << price2 << "!\n";
return 0;
}

方法二:
前提:包含庫 < iomanip > ,這個庫包含了對輸入輸出的控制,
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
double i = 3333.1415926;
cout << i << endl;
cout << setprecision(3) << i << endl;
cout << setprecision(9) << i << endl;
cout << setiosflags(ios::fixed);
cout << i << endl;
cout << fixed << setprecision(3) << i << endl;
cout << setprecision(9) << fixed << i << endl;
}

可以看出,C++默認浮點數輸出有效位數是 6 位(若前面整數位數大于 6 位,使用科學計數法輸出),而通過以下幾種方式可以更改輸出精度:
1.使用 setprecision(n) 即可設定浮點數輸出的有效位數
(若前面整數位數大于 n 位,使用科學計數法輸出)
2.使用 setiosflags(ios::fixed) 或 fixed,表示對小數點后面數字的輸出精度進行控制
所以,和 setprecision(n) 結合使用即可設定浮點數小數點后面數字的輸出精度,位數不足的補零
以上均采用 “四舍五入” 的方法控制精度,三個控制符均包含在 std 命名空間中,
CSDN博主「九霄星河」的原創文章
原文鏈接:https://blog.csdn.net/qq_35481167/article/details/82792103
列印末尾的0和小數
#include <iostream>
using namespace std;
int main()
{
float price1 = 20.40;
float price2 = 1.9 + 8.0 / 9.0;
cout.setf(ios_base::showpoint);
cout << "\"Furry Friends\" is $" << price1 << "!\n";
cout << "\"Fiery Fiends\" is $" << price2 << "!\n";
cout.precision(2);
cout << "\"Furry Friends\" is $" << price1 << "!\n";
cout << "\"Fiery Fiends\" is $" << price2 << "!\n";
// std::cin.get();
return 0;
}


轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/286353.html
標籤:其他
上一篇:Android Framework高級開發-修改的系統Window上模擬器運行
下一篇:【12】Kotlin函式泛型協程
