ความแตกต่างระหว่าง Console.Read() และ Console.ReadLine() ใน C#
ทั้งสองเป็นเมธอดของ Console สำหรับอ่านอินพุต แต่ทำงานต่างกันจริง
Console.Read()
- อ่าน **ตัวอักษรเดียว** (single character) จาก input stream
- คืนค่า
int(ASCII/Unicode code point) ไม่ใช่ char - คืนค่า
-1หากถึง End of Stream (Ctrl+Z / Ctrl+D) - **ไม่รอ Enter** - อ่านทันทีที่มีตัวอักษร (ขึ้นอยู่กับ buffering)
- มักใช้กับ input redirection หรือ pipe ไม่ใช่ interactive console
using System;
class Program
{
static void Main()
{
Console.Write("กดปุ่มใดปุ่มหนึ่ง: ");
int ascii = Console.Read();
Console.WriteLine($"\nASCII code: {ascii}");
Console.WriteLine($"Character: {(char)ascii}");
}
}
Console.ReadLine()
- อ่าน **ทั้งบรรทัด** จนกว่าจะกด Enter
- คืนค่า
string - คืนค่า
nullหากถึง End of Stream - เหมาะสำหรับ Interactive console input
using System;
class Program
{
static void Main()
{
Console.Write("ป้อนชื่อ: ");
string name = Console.ReadLine();
Console.WriteLine($"สวัสดี {name}!");
}
}
Console.ReadKey() - อีกตัวเลือก
- อ่าน **ปุ่มที่กด** ทันที (ไม่ต้องกด Enter)
- คืนค่า
ConsoleKeyInfo(มี Key, KeyChar, Modifiers) - มี overload
ReadKey(true)ไม่แสดงตัวอักษรบนหน้าจอ (สำหรับ password)
Console.Write("กด Enter เพื่อดำเนินต่อ... ");
Console.ReadKey(); // รอปุ่มใดปุ่มหนึ่ง
Console.WriteLine();
Console.Write("รหัสผ่าน: ");
var key = Console.ReadKey(true); // ไม่แสดง
// ต้องอ่านในลูปจนกว่าจะกด Enter
ตารางเปรียบเทียบ
| เมธอด | คืนค่า | รอ Enter | ใช้งานหลัก |
|---|---|---|---|
Read() | int (code point) | ไม่ (ขึ้นอยู่กับ buffering) | Low-level, Pipe, Redirect |
ReadLine() | string | ใช่ | Interactive input, Text lines |
ReadKey() | ConsoleKeyInfo | ไม่ | Menu, Game, Password, Single key |
ตัวอย่าง: เมนูเลือกด้วย ReadKey
Console.WriteLine("Menu: 1) Start 2) Options 3) Exit");
var key = Console.ReadKey(true);
switch (key.Key)
{
case ConsoleKey.D1: case ConsoleKey.NumPad1:
Console.WriteLine("\nStarting..."); break;
case ConsoleKey.D2: case ConsoleKey.NumPad2:
Console.WriteLine("\nOptions..."); break;
case ConsoleKey.D3: case ConsoleKey.NumPad3:
Console.WriteLine("\nExiting..."); break;
default:
Console.WriteLine("\nInvalid choice"); break;
}
ข้อควรระวัง
Read()บน Windows Console มักต้องกด Enter ก่อน (line buffered) - ไม่ได้ real-time จริงๆ- สำหรับ Real-time key input ใช้
ReadKey()หรือ Platform-specific APIs ReadLine()คืนค่าnullตอน EOF - ต้องตรวจสอบ null ก่อนใช้