---
# System prepended metadata

title: C++_IO輸出_cout

---

# 輸出
 
要介紹它其實很困難，
所以我簡化成了讓初學者看得懂得樣子。
(至少我看得懂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    

* 有效數字：指的是從第一個非零數字開始算起的數字個數，包括小數點前的。
* 精度和實際儲存的位數： 即使你設置了很高的精度，如果浮點數本身在計算過程中已經產生了誤差，輸出結果仍然可能不完全準確。