>這是我學習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)