CodeGym /課程 /C# SELF /鍵盤輸入

鍵盤輸入

C# SELF
等級 2 , 課堂 5
開放

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() 給他明確提示。

1
問卷/小測驗
認識 int 和 string 類型,等級 2,課堂 5
未開放
認識 int 和 string 類型
認識 int 和 string 類型
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION