Skip to main content

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' 沒有在這個範圍內宣告」(它有在下面把位置標記給你看)

看懂錯誤訊息後,下一步就是修正它。我們在前面補上宣告即可。

#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;
}

變數的資料型別和名字

前面提到了兩個重點

  • 變數在使用前要宣告
  • 宣告時要明定其「型別」和「名字」

稍後我們還會看到編譯器給出 `warring` 也就是「警告」的狀況,這是編譯器發現某處可能有問題,但程式依然可以完成編譯並執行。