# Ch2 變數與輸入 > 搭配 [Zero Judge 高中生程式解題系統](https://zerojudge.tw/Problems) ## > 上一章:[輸出](https://hackmd.io/s/rk7oU9i5-) > 下一章:[四則運算](https://hackmd.io/s/BJ0Awp09W) > 回目錄:[國立科學園區實驗中學C++程式語言自學講義](https://hackmd.io/s/B18yT_i5Z) ## <font color="darkblue">什麼是輸入</font> 在上一章我們學會了在小黑窗印出文字 但如果一支程式只能印出固定的東西 無法和使用者互動 那就太無聊了! 在這一章我們將學會讓程式讀取**使用者**輸入的資訊 (玩你寫出來的程式的人,就是你的程式的**使用者**,例如Green Judge的測試端) ## <font color="darkblue">什麼是變數</font> 如果要讀取資料,那就需要有地方可以把資料存起來 變數就像數學的代數x, y, z一樣,可以被代入任何的數值 用程式把輸入的資料**代進去**,就能保存輸入的資料了 變數相當於一個盒子,可以拿來裝資料 不同種類的盒子分別有不同的用途,例如裝飲料的牛奶盒、裝食物的便當盒、裝文具的鉛筆盒...等等 不同種類的變數也分別有不同的用途,例如<font color='red'>整數、小數、字串、字元、布林數</font>...等等 ## <font color="darkblue">宣告變數</font> 雖然在算數學的時候 每次想要用一個新的代數,就直接使用就好 但在寫程式時,每次想要用一個新的變數, 都要先將那個變數**新增**出來 這個**新增**的動作,我們稱做<font color='red'>宣告</font> 宣告變數的範例程式如下: ```cpp= int x ; ``` 這行程式的意義,就是宣告一個**用來存整數**的變數,名叫x 如果是要存**小數**的話,可以宣告成 ```cpp= float y ; ``` 這樣一來就新增一個名叫y的小數了 以下表格列出常用的變數型態 | 整數 | 小數 | 字元 | 字串 | 布林數 | | -------- | -------- | -------- | -------- | -------- | | int | float | char | string | bool | 另外還有用來存超大整數的long long 以及用來存超精準小數的double (**布林數**這個資料型態存的是**是或否**的資訊,其值就只有這兩種可能) 宣告變數的時候,一律先寫下它的型態(它是用來存哪種資料),然後是它的名稱。 以下提供各種範例 ```cpp= int number ; float body_height ; char blood_type ; string name ; bool is_girl ; ``` 變數的名稱可以**照自己的喜好**取 只要遵守以下原則 * 自己看得懂最重要,不要取些aa、aaa、aaaa的名稱 * 不能有兩個變數有一模一樣的名稱 * 有特定用途的單詞不能拿來取名稱用,例如if、else、while、for、int...等等 * 名稱中間不能有空白鍵或是數學類的符號,如果非得想要用兩個單字組成一個名稱的話,可以用底線`_`來連接,例如`blood_type` 宣告變數的時候,同類型的變數可以合併到同一行 例如 ```cpp= int a ; int b ; ``` 可以改寫成 ```cpp= int a, b ; ``` 合併到同一行的時候,必須用**逗號**隔開 ## <font color="darkblue">讀取資料</font> 變數被宣告出來後,就相當於一個空的盒子 下面這行程式,示範如何將使用者輸入的資料存進n這個變數裡 ```cpp= int n; cin >> n; ``` 和上一章學到的`cout`很像,但`cin`後面接的是兩個大於`>>` 可以想像成把餡料灌進泡芙裡的動作 \(把資料灌進變數裡\) 所以尖端朝右 `>>` (圖片來自icook愛料理) ![](https://i.imgur.com/IXsaG4Y.png) 電腦執行到`cin >> n`這行程式時, 就會停下來等使用者輸入 如果使用者一直沒輸入的話 程式就會一直停在這一行 使用者輸入數字以後,就會把資料存進變數裡了 例如 ```cpp= int n ; cin >> n ; cout << n; ``` 執行完`cin >> n;` 這行以後, `n`這個變數就會變成使用者輸入的數字 可以用`cout`印出來看看是否真的跟輸入時的數字相同 ## <font color="darkblue">一次輸入好幾筆資料</font> 如果想要寫一支讀取使用者的生日月分跟日期的程式 就會需要讀入兩個數字,分別存到兩個變數裡 以下是範例程式 ```cpp= int month ; int date; cin >> month ; cin >> date ; ``` 使用者在玩這支程式時,只要依序輸入月和日,就會分別被存進`month`和`date`這兩個變數裡 >Q:程式怎麼知道讀到哪裡為止是第一個數字,哪裡為止是第二個數字? 程式在讀資料的時候,會以**空白**以及**換行**來當成資料結束的依據 所以當使用者在小黑窗輸入`12 31`時,程式就會將`12`存進`month`這個變數裡 並將`31`存進`date`這個變數裡 但若使用者輸入的是`1231`,那麼程式就會將`1231`存進`month`這個變數裡 然後停下來等使用者再輸入一個數字,來存進`date` 如果想要只用一個`cin`來讀多個數字 可以用`>>`來把多個變數串起來 例如剛才的 ```cpp= cin >> month ; cin >> date ; ``` 可以改寫成 ```cpp= cin >> month >> date ; ``` 簡而言之,一切看你自己喜歡和方便! <font color='red'>但是記得,不可以寫成這樣哦!!</font> ```cpp= cin >> month, date ; ``` ## > 上一章:[輸出](https://hackmd.io/s/rk7oU9i5-) > 下一章:[四則運算](https://hackmd.io/s/BJ0Awp09W) > 回目錄:[國立科學園區實驗中學C++程式語言自學講義](https://hackmd.io/s/B18yT_i5Z)