Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ความแตกต่างระหว่าง Read() และ ReadLine() ใน C#

ความแตกต่างระหว่าง 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 ก่อนใช้