1. 前言
到目前為止,我們寫的程式都像收音機一樣:它們只會講話,完全不理你說什麼。這樣當然不行啦!大部分程式的目標,就是要幫使用者做點有用的事。所以很常需要讓使用者可以從鍵盤輸入資料。
舉個例子:
- 計算機會等你輸入數字跟運算。
- 網站表單會等你填姓名、e-mail 跟地址,這樣才能處理申請。
- 電腦遊戲會問玩家名字。
今天我們要給我們的應用程式一支麥克風!或者說一對耳朵,看你喜歡哪種說法 :) 準備好了嗎?走起!
2. 認識 Console.ReadLine()
Console.ReadLine() —— 這個 function(或叫 "指令")可以讓程式拿到使用者從鍵盤輸入的資料。
當程式執行到 Console.ReadLine() 這行時,程式會停下來...很有耐心地等你打點東西然後按 Enter。你在按 Enter 前輸入的所有東西,都會被當成一條字串。這條字串會回傳給程式——就像使用者透過小窗戶遞給你一張紙條一樣。
基本範例
// 問使用者名字然後跟他打招呼
Console.WriteLine("你叫什麼名字?");
string userName = Console.ReadLine(); // 這裡程式會等你輸入!
Console.WriteLine("哈囉," + userName + "!");
怎麼運作:
- 螢幕上會出現:你叫什麼名字?
- 你輸入,比如說 安德烈,然後按 Enter。
- 變數 userName 會拿到 "安德烈" 這個值。
- 螢幕上會顯示:哈囉,安德烈!
馬上提醒: Console.ReadLine() 回傳的東西 永遠 都是字串(型別 string)。就算使用者輸入的是數字,它還是字串!
3. 範例
來看看 Console.ReadLine() 實際怎麼用。
範例 1:輸入使用者名字
Console.WriteLine("請輸入你的名字:");
string name = Console.ReadLine();
Console.WriteLine("歡迎," + name + "!");
範例 2:一行顯示結果
用 + 這個運算子,你可以直接把文字跟輸入結果串在一起。
Console.Write("你最喜歡的顏色:");
string color = Console.ReadLine();
Console.WriteLine("酷喔!你最喜歡的顏色是 " + color + "。");
這個範例用的是 Console.Write(不會換行),這樣使用者的輸入會直接跟在問題後面。
範例 3:連續輸入好幾個
來做個小問卷:
Console.Write("你叫什麼名字? ");
string name = Console.ReadLine();
Console.Write("你幾歲? ");
string age = Console.ReadLine(); // 目前還是字串
Console.WriteLine("你叫 " + name + ",你 " + age + " 歲。");
你會看到:
你叫什麼名字? Vika
你幾歲? 23
你叫 Vika,你 23 歲。
4. 輸入數字資料:轉型
這裡有個新手超常踩的坑! Console.ReadLine() 永遠都回傳字串,就算使用者輸入 123。
如果你想拿到數字,要把字串轉成你要的數字型別(比如 int)。C# 裡面有轉型的方法,比如 int.Parse() 或 Convert.ToInt32() —— 我們上一堂課有講過。
範例:問年齡
Console.Write("你幾歲? ");
string input = Console.ReadLine(); // input = "27",比如說
int age = int.Parse(input); // 把 "27" 這個字串變成數字 27
Console.WriteLine("再過一年你就 " + (age + 1) + " 歲了");
如果使用者輸入的不是數字,程式會丟出錯誤(FormatException)。之後我們會學更穩的寫法,但現在這樣練習就夠了。
5. 你一定會遇到的錯誤
忘記轉成數字:
直接把 Console.ReadLine() 的值當數字用,沒轉型。
string input = Console.ReadLine();
int sum = input + 5; // 錯誤!字串不能跟數字加。
要先轉成 int:
int sum = int.Parse(input) + 5;
忘記宣告變數:
name = Console.ReadLine(); // 錯誤!變數 name 沒宣告。
要先宣告:string name = Console.ReadLine();
輸入跟輸出順序搞錯:
新手常常會犯這種蠢錯。其實老手也會,只是臉比較臭而已 :)
string name = Console.ReadLine();
Console.WriteLine("請輸入名字:" + name); // 應該先問,再讀!
正確順序:
Console.Write("請輸入名字:");
string name = Console.ReadLine();
Console.WriteLine("哈囉," + name);
實用小提醒
就算你用 Console.ReadLine() 沒有先問問題(比如直接 string x = Console.ReadLine();),程式還是會等你輸入。但使用者根本不知道要輸入什麼!所以一定要用 Console.Write() 或 Console.WriteLine() 給他明確提示。
GO TO FULL VERSION