2.2 變數與輸入
像 1, 24, 3.14 這樣的數,我們稱為 字面常數(literal constant),它的值是固定不變的。
另外像我們在數學代數中用到的 x, y, z 等,則稱為 變數 ,它的值可以改變。
在電腦程式中,變數是很重要的。它可以用來儲存輸入的資料,計算中的數值,表示某個狀態等。
使用 cin 輸入資料
下面這段程式在執行之後,會先詢問你的年齡,在你輸入年齡並按下 [Enter] 後,輸出 "You are xx years old."。這個 xx 會是你輸入的值。
int age;
cout << "How old are you?";
cin >> age;
cout << "You are " << age << " years old." << endl;
標準輸入
在程式中出現的 cin 是用來由標準輸入(standard input)將資料讀入電腦,我們可以把它想像成和 cout 相反的流向。
一般來說標準輸入指的是鍵盤的輸入,而輸入的值必須被存放到電腦裡,供後續的運算和使用。

變數
我們可以把變數想像成是一塊有名字的記憶體。但是它除了有名字之外還有型別,一個型別為整數(integer)的變數,裡面只能放整數;型別為字串(string)的變數,裡面只能放字串。
宣告
在上面程式碼的第一行 int age;,是在 宣告(declare) 這個變數。每一個變數在使用前都必須先宣告,明確指出變數的型別和名字。
一個典型的變數宣告,長這個樣子。
型別 變數名;
例如:
int age;
如果不宣告就使用變數,會發生什麼事呢?
#include <iostream>
using namespace std;
int main()
{
cout << "How old are you?";
cin >> age;
cout << "You are " << age << " years old." << endl;
return 0;
}
在上面這個程式的第 8 行,我們想使用到 age 這個變數。但是往前看卻沒有看到這個變數的宣告。
這個程式在編譯時,編譯器(compiler)會發出如下的錯誤訊息。
main.cpp: In function ‘int main()’:
main.cpp:8:12: error: ‘age’ was not declared in this scope
8 | cin >> age;
| ^~~
編譯器的錯誤訊息都是英文的,但是同學們一定要學會看錯誤訊息,看懂錯誤訊息可以讓你很快抓到重點,把錯誤修正。
在這段錯誤息裡
-
第一行是告訴我們,它抓到錯誤的位置在
main.cpp這個檔案裡的int main()函數裡。 -
第二行可以看到精確的位置,第 8 列(row),第 12 行(column)。所以到第 8 列第 12 個字元的位置,你就可以看到這個錯誤訊息描述的 'age'。
-
繼續往下看
error表示這是個「錯誤」,不修正它程式就無法成功編譯執行。 -
之後則是錯誤的描述
‘age’ was not declared in this scope,它說「這個 'age' 沒有在這個範圍內宣告」(它有在下面把位置標記給你看)
稍後我們還會看到編譯器給出 `warring` 也就是「警告」的狀況,這是編譯器發現某處可能有問題,但程式依然可以完成編譯並執行。
看懂錯誤訊息後,下一步就是修正它。我們在前面補上宣告即可。
#include <iostream>
using namespace std;
int main()
{
int age; // <-- 我們在這裡補上宣告
cout << "How old are you?";
cin >> age;
cout << "You are " << age << " years old." << endl;
return 0;
}
變數的資料型別和名字
前面提到了兩個重點
- 變數在使用前要宣告
- 宣告時要明定其「型別」和「名字」
變數名命規則
我們可以自行命名每一個變數,但是必須遵守以下規則:
- 變數名稱的第一個字元必須是底線
_或英文字母A~Z, a~z - 除了第一個字元外,變數名稱只能由底線
_、英文字母A~Z, a~z和數字0~9組成。
- 合法的變數名稱例子有:
Ageagelength_nameid1246 - 不合法的變數名稱例子有:
369citymy#name
常用的基本資料型別
| 名稱 | 關鍵字 | 大小 | 範圍 | 備註 |
|---|---|---|---|---|
| 字元 | char | 1 Byte | $0 \sim 255$ | |
| 整數 | int | 4 Byte | $-2^{31} \sim 2^{31}-1$ | 如:12, -65 |
| 無號整數 | unsigned int | 4 Byte | $0 \sim 2^{32}-1$ | 如:23, 656372 |
| 單精確浮點數 | float | 4 Byte | ||
| 雙精確浮點數 | double | 8 Byte | ||
| 字串 | 如:"Peter" |