2010-11-18 77 views
8

C# tương đương với mã C sau là gì:(c = getchar())! = EOF trong C#?

while((c = getchar())!= EOF) 
    putchar(c); 

Tôi biết getchar() và putchar() sẽ được thay thế bằng Console.Read và Console.Write tương ứng nhưng những gì về EOF. Đặc biệt lưu ý, C# làm việc với unicode và C với ASCII, những hàm ý đó là gì?

+0

Bạn đã kiểm tra tài liệu cho Console.Read chưa? http://msdn.microsoft.com/en-us/library/system.console.read.aspx –

Trả lời

8

Console.Read() trả về -1 trên EOF (tình cờ, EOF được định nghĩa là -1 trên hầu hết các nền tảng).

Bạn có thể làm:

int c; 
while ((c = Console.Read()) != -1) { 
    Console.Write(Convert.ToChar(c)); 
} 

Ngoài ra, C# vỗn dĩ hoạt động với UNICODE trong cùng một cách mà C vỗn dĩ hoạt động với ASCII, ví dụ: không có ý nghĩa hơn. System.Char đại diện cho một ký tự UCS-2UNICODE, cũng phù hợp với một int, vì vậy mọi thứ sẽ ổn thỏa.

1
 int c = -1; 
     while ((c =Console.Read()) >=0) 
     { 
      Console.WriteLine(c); 
     } 
+0

Vì vậy, không có tương đương thực sự của EOF của C trong C# ?? – Fahad

+2

Cuộc gọi với WriteLine là gì? Và tại sao bạn viết số? –

+2

@ Fahad: Tương đương thực là giá trị hằng số -1. Đây là giá trị trả về được ghi nhận khi bạn không có nhiều hơn để đọc. –

3

Off đỉnh đầu của tôi,

int c; // N.B. not char 
while((c = Console.In.Read()) != -1) 
    Console.Out.Write((char)c); 

Rõ ràng Read() lợi nhuận -1 nếu không có gì hơn để đọc. Tôi không thấy một hằng số EOF được xác định. Tôi có thể có xu hướng sử dụng >= 0 thay vì ngay cả != -1.

Tôi không nghĩ ANSI và Unicode tạo ra bất kỳ sự khác biệt nào - bạn đang đọc một số từ một cuộc gọi API và cho nó vào một cuộc gọi API khác. Bạn cũng có thể sử dụng Unicode trong C.

+0

Bạn có biết điều gì sẽ xảy ra nếu bạn gọi 'Console.Out.Write (int)'? –

+0

@Lasse D'oh, điểm tốt. Đã sửa (hy vọng) – Rup

Các vấn đề liên quan