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