Nhập / Xuất cơ bản trong ứng dụng console

Đầu ra chuẩn và đầu ra báo lỗi

Như bạn đã biết mọi chương trình đều có 2 dòng đầu ra chuẩn là:

  • Đầu ra chuẩn (Standard Output): Được sử dụng để in ra các dữ liệu hợp lệ. Ví dụ: bạn muốn in ra màn hình console 1 xâu ký tự hay 1 giá trị số.
  • Đầu ra báo lỗi (Error Output): Được sử dụng để cung cấp chi tiết về những tình huống không mong đợi xảy ra. Ví dụ như: chương trình đang chạy thì bị dừng lại và thoát ra bởi một lý do nào đó thì sẽ phải đưa ra thông báo lỗi tương ứng.

Bạn có thể tự hỏi nếu nó như vậy phổ biến tại sao bạn không nhận thấy nó? Thông thường các ứng dụng mà đầu ra một cái gì đó được thực hiện trong một giao diện điều khiển. Bàn điều khiển đang đọc dữ liệu từ cả đầu ra tiêu chuẩn và đầu ra lỗi và in nó theo cùng một cách. Hơn nữa, một số ứng dụng không phân biệt đầu ra và đặt tất cả vào một đầu ra tiêu chuẩn.

Đầu ra chuẩn

Bây giờ chúng ta sẽ tiếp tục tìm hiểu làm thế nào để in ra mà hình console một thông báo. Trong .NET Framework có một lớp đặc biệt chịu trách nhiệm thực thi các thao tác với màn hình console là System.Console. Ngay từ chương trình đầu tiên bạn đã làm việc với lớp Console với thao tác in ra dòng chữ "Hello, World!" như sau

Console.WriteLine("Hello, World!");

Ví dụ ConsoleWriteDemo sau đây sẽ minh hoạ rõ về cách sử dụng Console.WriteLine():

Phương thức WriteLine() sẽ in ra nội dung xâu đối số truyền vào ra màn hình console. Ngoài phương thức này còn một phương thức có chức năng tương tự là Write().Sự khác nhau duy nhất giữa 2 phương thức trên là WriteLine() sẽ thêm ký tự xuống dòng khi in ra trên màn hình console.

Đầu ra báo lỗi

Đây là lớp đại diện cho dòng xử lý lỗi chuẩn trên trong ứng dụng console. Ví dụ khi gặp trường hợp bất thường, bạn có thể đẩy thông báo vào luồng xử lý lỗi để báo với hệ thống có tình huống bất thường xảy ra:

Console.Error.WriteLine("An error");

Đọc dữ liệu trên màn hình console

Một thao tác rất hay gặp khác khi làm việc với ứng dụng console là bạn sẽ phải nhập dữ trên mà hình console và đọc dữ liệu đầu vào đó. Để làm điều này, cách đơn giản nhất là bạn sử dụng phương thức ReadLine() của lớp System.Console như sau:

string s = Console.ReadLine();

Cho đến lúc này bạn đã nắm bắt được cả thao tác đọc dữ liệu và hiển thị dữ liệu trong ứng dụng console. Sau đây, xin mời bạn gõ ví dụ ConsoleReadDemo:

Định dạng xâu trong phương thức Console.WriteLine()

Khi làm việc với câu lệnh in dữ liệu với nhiều kiểu khác nhau ra màn hình console thì bạn mong muốn in chính xác định dạng cho từng kiểu. Để làm được điều đó, bạn có thể dùng trực tiếp chuỗi định dạng cho các kiểu dữ liệu trong C# hoặc là dùng thông qua phương thức String.Format(). Trong ví dụ sau, chúng tôi sẽ nêu ra một trường hợp đơn giản dùng chuỗi định dạng trong phương thức Console.WriteLine():

int a = 2;
int b = 2;
Console.WriteLine("{0} + {1} = {2}", a, b, a + b);

Kết quả sẽ như sau:

2 + 2 = 4

Như bạn đã thấy ở ví dụ trên, câu lệnh phương thức WriteLine() có 2 phần:

  • Phần trong nháy kép sẽ in ra chuỗi cố định và có thể gắn thêm giá trị của của biến sẽ in tương ứng với vị trị của cặp ngoặc nhọn {} và giá trị chỉ số tương ứng. Giá trị chỉ số sẽ đánh số từ 0 tương ứng với danh sách tuần tự các giá trị của biến hay biểu thức trong câu lệnh gọi phương thức WriteLine()
  • Phần sau nháy kép được bắt đầu bởi dấu phẩy sẽ lần lượt chỉ ra giá trị của các biến hay biểu thức sẽ được in tương ứng trong phần nội dung nháy kép được in ra trên mành hình console. Trong ví dụ trên thì biến a sẽ in ở vị trí {0}, biến b in ở vị trí {1} và giá trị biểu thức a + b in ở vị trí {2}.

Trong một số trường hợp khác bạn muốn in giá trị của một biến với định dạng của kiểu dữ liệu khác như giá trị số thực nhưng in ra kèm với định dạng tiền tệ như sau:

double c = 3.45;
Console.Readline("{0:C}", c);

Kết quả sẽ như sau:

$3.45

Đặc tả định dạng số

Định dạng số chuẩn

ĐẶC TẢ LOẠI ĐỊNH DẠNG VÍ DỤ (36.45) VÍ DỤ (-12345)
c/C Currency {0:c} $36.45 (-$12,345.00)
d/D Decimal {0:d} Exception -12345
e/E Scientific {0:e} 3.645000e+001 -1.234500e+004
f/F Fixed-point {0:f} 36.45 -12345.00
g/G General {0:g} 36.45 -12345
n/N Number with thousand separator {0:n} 36.45 -12,345.00
p/P Percentage {0:0} 3,645.00 % 1,234,500.00 %
r/R Round-trip {0:r} 36.45 Exception
x/X Hexadecimal {0:x} Exception fffcfc7

Tuỳ chỉnh định dạng số

Dựa trên những đặc tả định dạng số chuẩn, bạn có thể thay đổi một vài thông số để có được những định dạng tuỳ chọn cụ thể cho những trường hợp đặc biệt:

ĐẶC TẢ KIỂU VÍ DỤ GIÁ TRỊ KẾT QUẢ
0 Zero placeholder {0:0000.0000} 3.45 00003.4500
# Digit placeholder {0:#####:##} 531.456 531.45
. Decimal separator {0:0,000.00} 1234.45 1,234.45
, Thousands separator {0:0,000.00} 1234.45 1,234.45
% Percent sign {0:0.00%} 0.45 45.00%

Đặc tả định dạng ngày tháng

Định dạng ngày tháng chuẩn

ĐẶC TẢ KIỂU VÍ DỤ
d Short date 08/03/2013
D Long date Friday, March 08, 2013
f Full date and time, short Friday, March 08, 2013 10:10 AM
F Full date and time, long Friday, March 08, 2013 10:10:44
g Default date and time 08/03/2013 10:10 AM
M Month and day March 08
r RFC1123 date Fri, 08 Mar 2013 10:10:44 GMT
s Sortable date stirng 2013-03-08T10:10:44
t Short time 10:10 AM
T Long time 10:10:44
u Universal sortable local time 2013-03-08 10:10:44Z
U Universal GMT Friday, March 08, 2013 08:10:44
Y Month and year March, 2013

Tuỳ chỉnh định dạng ngày tháng

ĐẶC TẢ NGHĨA VÍ DỤ KẾT QUẢ
d Day, zero-padded {0:dd} 08
ddd 3-letter day name {0:ddd} Fri
dddd Full day name {0:dddd} Friday
ff Second fractions, 2 digits {0:ff} 19
fff Second fractions, 3 digits {0:fff} 193
ffff Second fractions, 4 digits {0:ffff} 1934
gg Era {0:gg} A.D.
hh Hour (2 digits, 12H) {0:hh} 10
HH Hour (2 digits, 24H) {0:HH} 10
mm Minutes, zero-padded {0:mm} 16
MM Month, zero-padded {0:MM} 03
MMM 3-letter month name {0:MMM} Mar
MMMM Full month name {0:MMMM} March
ss Seconds {0:ss} 02
tt AM/PM {0:tt} AM
yy 2-digit year {0:yy} 13
yyyy 4-digit year {0:yyyy} 2013
zz 2-digit timezone offset {0:zz} +02
zzz Full timezone offset {0:zzz} +02:00

Sau đây là một ví dụ về sử dụng đặc tả tuỳ chỉnh theo tình huống cụ thể:

Console.WriteLine("{0:hh:mm tt, ddd-MM-MMM yyyy gg}", DateTime.Now));

Kết quả sẽ như sau:

10:26 AM, Fri-03-Mar 2017 A.D.

Complete and Continue