# 輸出 要介紹它其實很困難, 所以我簡化成了讓初學者看得懂得樣子。 (至少我看得懂XD,希望你們也能看懂) 有兩種輸出方法 以下我就用**int,string,char,float**配合舉例ㄅ~ (以下省略#include <iostream>;using namespace std;int main;) ## <iostream>的cout ### 1. **資料型別:int** eg. ```cpp= //using namespace std //如果我沒有寫上面這行,那我每一個cout前都要加std:: const int i = 2024; //const int可以把確定不變的變數固定 std::cout << i << "確定製作\"四葉繼承篇\"" << std::endl;` int season = 1; int episodes = 12; std::cout << "怪獸八號第" << season << "季有" << episodes << "集\n"; ``` 輸出的: 2024確定製作"四葉繼承篇" 怪獸八號第1季有12集 #### 解說: 在`std::cout`後面加上兩個`<<` `<<`是什麼意思呢? 用簡單的比喻來講`<<`就像箭頭, `cout(輸出) << (想輸出的)` 把右值指派給`cout`來做輸出的動作。 :stars:觀念的部分有詳細解說,有興趣可以去看看 不過要使用`cout`輸出的話, 就必須要寫上`<iostream>`標頭檔了!! 在最後面放上的`endl`(也就是換行), 也可以用`"\n"`,也是換行的意思。 #### 一定有人想問為什麼要用變數?直接寫不是比較方便嗎? Ans: 因為要**方便修改**啊, 假如我輸出10行,卻沒宣告變數, 那我如果要改不就要改很多行嗎, 所以你就能知道宣告變數的重要性了 不過當然 `cout << 543 << endl;`也是OK的喔 #### **呱呱:** 不過眼尖的你們應該會發現, 在""裡面的""為什麼要加\\(反斜線)呢?? 說來複雜, 這種原理叫做**跳脫字元** 我會放在觀念那一區。 ### 2.**資料型別:string** eg. ```cpp= #include <string> //string比較特殊 string a = "\"One Piece is real\"" ; cout << "伊莉莎白女王曾說:" + a << endl; // 當然也能用<<取代+ // 數字和符號也可以在裡面喔!!因為他們也是字元 ``` #### 解說: `string`用來宣告**字串** 字串要加在""(引號)裡, 就跟直接輸出字串一樣。 `string`獨有的`+`, 可以直接將變數加在字串後面 其他不行喔 #### **阿巴阿巴:** 因為要寫std::太麻煩了, 所以我們可以先在**標頭檔**的下面, 寫上`using`我自己是翻譯"宣告"啦, 宣告什麼呢?一個**命名空間**`namespace` 然後`std` + `;`(冒號) 完整寫起來就是`using namespace std;`了喔(囉)!! ### **3.資料型別:char** eg. ```cpp= char w = 'a'; cout << w << "\n"; ``` #### **輸出:** a #### 解說: `char`是專門用來宣告一個**字元**的資料型態, 把你想要寫的字元用`''`包起來就行了。 大部分時候, 我們都以**陣列**搭配使用, 不過還沒教到,所以就沒放上來了。 ### **4.資料型別:float** eg. ```cpp= float pi = 3.1415926535; cout << "圓周率是" << pi << endl; ``` #### 輸出: 圓周率是 3.14159 #### 解說: 雖然我們在程式碼中將圓周率 pi 賦予了許多位小數,但實際上,電腦在內部儲存浮點數時,並不能完全精確地表示所有的小數。 #### 原因分析: 浮點數的二進位表示法: 1. 電腦內部使用二進位來表示數字,而許多小數在二進位下是無限循環的。 2. 為了有限的儲存空間,浮點數只能用近似值來表示,這就導致了精度上的損失。 #### 浮點數的類型: C++ 中的 `float` 和 `double` 是兩種常用的浮點數類型。 `float` 的精度比 `double` 低,也就是說,`float` 能表示的有效數字位數較少。 即使是 `double`,也不能保證完全精確地表示所有的小數。 `cout` 的默認輸出精度: `cout` 在默認情況下,會根據浮點數的類型和具體的值,自動選擇一個合適的精度進行輸出。 這個精度通常是足夠滿足一般計算的,但對於高精度的計算,可能就不夠了。 #### 如何控制輸出精度? 為了更精確地控制輸出浮點數的位數,我們可以使用 C++ 的 `iomanip` 函式庫中的`setprecision()`: ```cpp= #include <iostream> #include <iomanip> using namespace std; int main() { double pi = 3.1415926535; cout << setprecision(10) << pi << endl; // 輸出 10 位小數 return 0; } ``` #### 輸出 3.141592654 //最後面會四捨五入 //因為整數也有被包含進去, 所以如果要輸出小數點後六位, 就要寫`setprecision(7)` 又或者,你只要控制純小數(沒有整數,這裡是0.141592654) 就寫`cout << fixed << setprecision(小數位數) << 變數/數字;` > **setprecision(n)**:設定輸出浮點數的有效數字位數。 #### NOTE * 有效數字:指的是從第一個非零數字開始算起的數字個數,包括小數點前的。 * 精度和實際儲存的位數: 即使你設置了很高的精度,如果浮點數本身在計算過程中已經產生了誤差,輸出結果仍然可能不完全準確。