###### tags: `FoShiShi` # 基本語法 ## What 在寫`C++`時需要使用`C++`看得懂的語言來寫 :::success 就像你**對美國人講中文**,**他會聽不懂** ::: 所以我們要寫`C++`需要先學`C++`的語言 而在`C++`中的語法**有一大部分都可以用在其他語言中** (~~這就是`C++`比`Python`好的其中一個原因~~) ## When 任何你要寫`C++`的時候 其實不只`C++`,因為這些有大部分可以延用至其他語言 反正這些都是 **最基本的地基** 至少要知道這些才可以寫出`C++`的各種其他語法 ## How 我直接用**最基本的程式碼之一** --- `hello, world`,來說明 ### Hello World `hello, world`是一段最基本的`C++`程式碼,是所有**初學者第一次接觸程式語言時寫的程式** ```cpp= #include<iostream> using namespace std; int main() { cout << "hello, world" << endl; return 0; } ``` 以下來仔細分析這段程式碼: ```cpp=1 #include<iostream> ``` `#include<...>`指的是將`...`這個**函式庫**導入這段程式 導入的目的就是讓這段程式碼可以用這個**函式庫**中的**各種函式** :::success 就像是你在圖書館,有很多種書 現在你想做一件事情,你**要先找到有傳授這種知識的書** **讀完這本書後才能知道書中的事情要怎麼做** ::: 當然我們有很多書,也可以讀很多書, 所以有很多種的`<...>`(例:`<math.h>`、`<algorithm>`),也可以`#include<...>`很多次 :::info `C++`中有個"百科全書"叫做`<bits/stdc++.h>`,極為毒瘤 ::: --- ```cpp=2 using namespace std; ``` 其實這行的意思可以先不用管 因為講起來有點抽象 而且要講清楚需要扯到其他毒瘤東東 但反正我還是講一下 不想看的可以跳到下一個 這裡的`using namespace ...`指的是**使用命名空間** 而命名空間是什麼呢? 我來舉例好了 :::success 臺灣**有很多中正路** 臺北市士林區中正路 桃園市桃園區中正路 新竹市中正路 ... 那如果我們在美國跟另一個臺灣人說:「我家在中正路」 他顯然**不知道你指的中正路是哪個中正路** 這時我們可以**限定我們命名的地方**,例如桃園市 也就是`using namespace 桃園市` 這時你說的中正路就都會是桃園的了 但這樣就會有一個問題 如果這是你需要跟其他人**說多個不同的中正路** 你**就需要一直限定、再解除限定...** 就很麻煩 那你可以在每個中正路前面加他的地方 像是: 桃園市的中正路 臺北市的中正路 也就是 `桃園市::中正路` `臺北市::中正路` ::: 那這裡的`std`命名空間主要是用來限定`C++`標準程式庫類型和函式 這裡有限定的東西是`cout`跟`endl` 所以如果你沒有`using namespace std` 你就要把`cout`跟`endl` 改成`std::cout`跟`std::endl` --- ```cpp=4 int main() { ... } ``` 這是**主函式** 是**整個程式最一開始會執行的函式** 也是程式中**最主要執行操作的部分** `....`就是放操作的地方 其他的就以上面的寫法即可 如果好奇這寫法為什麼這樣寫的 歡迎去到**函式**的講義看看(請先學完**資料型態**) --- ```cpp=5 cout << "hello, world" << endl; ``` 這裡的`cout`就是**輸出(`output`)** `C++`中`cout`的語法如下 `cout << ... << ... (可接無數次)` 可以在`cout`加上無數個`<< ...` 然後這裡的`...`可以是各種型態,像是字串、數字、運算式之類的 **並且同個**`...`**中必為同個資料型態** :::info 這裡的`"..."`是`字串`,我們會在[**`資料型態`**](https://chrislaiisme.github.io/FoShiShi/data_types)(<font size=1px>這裡其實有超連結只是字是藍的所以不明顯</font>)淺談, 並在[**`字串`**](https://chrislaiisme.github.io/FoShiShi/string)(<font size=1px>這裡其實有超連結只是字是藍的所以不明顯</font>)中詳細的說明用法 現在先知道要用`""`包起來就好了 ::: 這裡的`endl`是對輸出檔做**換行**(不是程式碼中換行) :::info 如果記不起來`cout <<`的箭頭方向 就**把`cout`想成是一個盒子,用來裝你要輸出的東西** 然後要把`盒子 << 你想輸出的東西` 就是**把東西指進去盒子裡面** ::: --- ```cpp=6 return 0; ``` `return`用於在函式中**回傳某個值**,**同時終止函式** :::info **回傳**就是指你要給程式裡面的訊息,之後在 [**`函式`**](https://chrislaiisme.github.io/FoShiShi/function)(<font size=1px>這裡其實有超連結只是字是藍的所以不明顯</font>) 的時候會再講 ::: 在`main`函式中`return`的目的在於停止程式,在最後確保程式能夠正常終止 :::success 就像你在跟別人講話的時候 當你要結束話題的時候 你**必須直接明白的跟他說你要結束了** 才能夠離開他,不然就很失禮 但有趣的事情來了 正常來說一個函式會在執行完所有操作後直接幫你跳出去(有些狀況不會) 所以**不加其實沒差** 就像你跟別人講話的時候 **他知道你其實講完話了** **所以就可以理所當然地離開** ::: 如果要於某函式**回傳某值**,那就是在要**用於接收此函式的回傳值**來加以利用的時後 例:接收三角函數的回傳值來計算其他東西 --- ### 其他語法 #### 輸入 剛才的`hello, world`程式碼有提及輸出也就是`cout`的語法 那 **輸入也就是`cin`** 就是你自己打出來要給程式的東西 你需要先 **宣告東西** 你才能輸入這個東西,所以會在`cin`的語法 [**`資料型態`**](https://chrislaiisme.github.io/FoShiShi/data_types) 那邊講 #### 排版 `C++`是個**弱排版程式語言** 這代表**過多的空格或縮排(`Tab`)對整體程式來說不會有影響** 相信有學過`Python`的都知道 縮排沒縮好就有可能整個爛掉 但`C++`就不會有這種問題 所以就算你不縮排對程式碼也不會怎樣(**只是你眼睛會先瞎掉**) #### 分號 **分號很重要** 是用來**標示一個操作的結束** 所以幾乎每一行的結尾都要打上`;`的符號 但有些操作的結尾是不用加分號的 例: `#include<...>`, `#define ... ...` 然後因為分號表示操作的結束 所以**不要在沒結束的東西後亂加分號** 例: `int main() {` 的後面不用加(可以參考上面`hello, world`的程式碼) #### 註解 在文字前加上`//`即可變成**註解** 例: ```cpp= cout << "aaa" << endl; // 輸出"aaa" ``` 那如果你想要註解多行 就把註解包在`/* */`中間(就算換行也可包) 例: ```cpp= cout << "aaa" << endl; /*輸出"aaa" 輸出完之後就結束了 剩下就剩我在這裡打的字了 雖然沒有意義但我就想打*/ ``` --- ## 實際應用 ### 題目1 輸出`12345`並換行 :::spoiler solution 輸出用`cout` ```cpp= #include<iostream> using namespace std; int main() { cout << 12345 << endl; return 0; } ``` ::: ### 題目2 輸出`Hello C++`並換行 :::spoiler solution 字串要用`""`包起來 ```cpp= #include<iostream> using namespace std; int main() { cout << "Hello C++" << endl; return 0; } ``` :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up