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ứcWriteLine()
- 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.