---
# System prepended metadata

title: 02. 輸入/輸出
tags: [cpp learning]

---

>這是我學習C++時所留下的紀錄彙整成的教學
>edit: 宋辰星 興大附中電腦研究社20th 教學 
# 02. 輸入/輸出
###### tags: `cpp learning`
這裡會講到一個程式的結構及最基本的功能--輸入(input)/輸出(output)。
## <font color = "#3398ff">C++ 程式碼的基本結構</font>
在開始這次的主題前，
要先來說說C++程式碼的長相及一些寫作時的注意事項

```cpp=
#include<iostream>
int main(){
    return 0;
}
```
以上是一個什麼都不做的程式，
雖然它沒有任何功能，但是它包含了一個程式碼應該要有的東西。

### #include<標頭>
```cpp=
#include<iostream>
```
這是程式碼的第一行，
它「**引入(include)**」了一個名為「**iostream**」的**標頭檔**，
`標頭檔是一個檔案，通常是原始碼的形式，
由編譯器在處理另一個原始檔的時候自動包含進來`by:[wiki](https://zh.wikipedia.org/wiki/%E5%A4%B4%E6%96%87%E4%BB%B6)
標頭檔有**很多**，這裡的iostream只是其中一個，它包含了幾種基本的**輸入/輸出**功能，
我們通常會將所有的#include放在程式碼的開頭。
    
### int main(){}

```cpp=
int main(){
    return 0;
}
```
這是此程式的主要部分，
一個程式碼會包含一個或一個以上的「函式(function)」，
而這些函式中必須包含一個被命名為「main」的「主函式」，
我們的主要程式碼就要放在main裡面。

而那個 return 0; 則是一個用來「結束」程式的「述句」，
==每個述句後都要加上一個<font color="#f00">「**分號**`;`」</font>== 👈重要!!
它很常被忘記，如果少打或打成冒號`:`可能會引發一些神祕的錯誤，
而且<font color="#f00">超級難找!!!</font>


>看到頭昏腦脹了嗎? 不要怕，先有個概念就好，寫多了自然就會領悟到der~ 😊

## <font color = "#3398ff">註解的使用</font>
C++中有兩種註解方式供我們使用。

### 第一種:成對註解
成對註解是從C語言繼承過來的，使用方法是將註解的文字用	
`/*`及`*/`包起來，`/*`和`*/`之間的所有文字都會被當作註解的一部分。
像這樣:
```c=
/*我是一個成對註解*/
```

### 第二種:單行註解
單行註解的使用方式是將註解接在`//`之後，在雙斜線後的整行文字都會被忽略
像這樣:
```cpp=
//這是一個單行註解
```
---

## <font color="#3398ff">輸出</font>
要讓程式輸出我們所指定的內容，我們要使用==cout== (讀音:西奧)這個東西。

範例:

```c=
#include<iostream>

int main(){
    std::cout << "I love SHCH!" << std::endl;
    return 0;
}
```

這個範例程式中主要的述句是:

```cpp=
    std::cout << "I love SHCH!" << std::endl;
```
### cout

要輸出我們指定的內容，
我們會先打一個==cout==，後面接上 ==<<(輸出運算子)==，然後加上我們==想輸出的內容==
如下:
```cpp=
cout << 想輸出的東西
```
### endl

接在`"I love SHCH!"`後面的`endl`是一個特殊值，
寫入`endl`有 ==結束目前文字並清空緩衝區== 的效果，
確保我們當次輸出的不是留在緩衝區的資料。
在顯示上的效果就是 ==「換行」==。

### std::
而在`cout`和`endl`的前面，有 ==`std::`== 這個怪東西，
它告訴電腦 :「我要使用定義在std命名空間裡這個叫cout的傢伙」
>命名空間? 什麼鬼? 可以吃嗎?
### 命名空間(namespace)
我們知道C++中有許多功能，像是剛剛學到的`cout`以及稍後會看到的`cin`和`endl`，
為了避免我們在為變數(稍後會說變數是什麼)命名時不小心取到這些功能的名稱而產生錯誤，
它們被定義在「std」這個「命名空間」中，所以要使用它們時，就要先加上`std::`

>每次使用都要加也太麻煩了吧!

其實我們可以在程式的一開始加上這行:

```cpp=
using namespace std;
```
之後就不用逐一加上`std::`了!

改寫後的程式碼如下:
```cpp=
#include<iostream>
using namespace std;

int main(){
    cout << "I love SHCH!";
    return 0;
}
```
---

## <font color = "#3398ff">變數</font>

我們在寫程式時，會使用「變數」來儲存資料。

變數就像是數學上我們所使用的代數，
可以將數值帶入 x、y、z這些代號中。

變數是用來儲存資料的「容器」，
可以裝各種不同種類的資料，如：整數、小數、字元、字串...

### 宣告變數

要使用變數，我們需要先 ==「宣告」== 它，
先決定他的資料型態(ex:int)，再幫它取個名字，然後用`=`指定他的值。
語法：`資料型態 它的名字 = 值;`

像這樣：
```cpp=
    int myInt = 2147483647;                // 整數
    long long myLL = 9223372036854775807; // 比較大的整數
    float myFloat = 3.1415;              // 浮點數
    double myDouble = 3.14159265;       // 更精準的浮點數
    char myChar = 'A';                 // 字元
    string myString = "LoveSHCH";     // 字串
    bool myBool = true;              // 布林值(true or false)
```
---
### 整數
```cpp=
    int myInt = 2147483647;
    long long myLL = 9223372036854775807;
```
宣告一個整數我們最常使用`int`(也就是integer的縮寫)
它可以儲存 <font color="#0000ff">-2,147,483,648 到 2,147,483,647</font> 的值。

`long long`可以用來儲存超大的整數，
範圍是 <font color="#0000ff">-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807</font>

---

### 浮點數

```cpp=
    float myFloat = 3.1415;              
    double myDouble = 3.14159265;
```

`double` 可以儲存比`float`更多位的浮點數，所以我們通常直接用`double`

---

### 字元

```cpp=
    char myChar = 'A';
```
字元用來儲存單個字符，用`''`把它包起來。

---

### 字串

```cpp=
    string myString = "LoveSHCH";
```
`string`是用來儲存「一串字元」的資料型態，雖然它沒有在內建類型中，
但使用方法跟其他一樣，使用時記得在開頭加入`#include<string>`。
它的值要用`""`把它包起來。

### 布林值
```cpp=
    bool myBool = true;
```

布林值用來儲存兩種值：「真」、「假」
1. 真：`true` =\\= 0
2. 假：`false` == 0

---

## <font color = "#3398ff">輸入</font>
要讀取使用者輸入，我們會用到==cin==(讀音:西印)
使用**輸入運算子**`>>`將使用者輸入的內容儲存進變數中。

範例:

```cpp=
#include <iostream>
using namespace std;
int main(){
    int num = 0;//宣告一個叫做「num」的變數，它的資料型態為整數，值為0。
    cin >> num;//將使用者輸入的內容存入num中。
    cout << num;//把num的值印出來。
    return 0;
}
```

掌握了基本的輸入輸出後，來做個練習吧！
:::success
exercise: [ZeroJudge a001.哈囉](https://zerojudge.tw/ShowProblem?problemid=a001)
:::

>下回:[基本運算](/VmGnwP8lTVOLqHOJZKTS5g)
>回目錄:[C++學習筆記](https://hackmd.io/@94sunglahaha/H1Hop0EcY)


