1. Giới thiệu
Trước giờ tụi mình viết mấy chương trình kiểu như radio: nó chỉ nói gì đó, chứ không thèm để ý bạn nói gì. Dĩ nhiên, như vậy thì chán lắm! Mục tiêu của đa số chương trình là làm gì đó có ích cho người dùng. Vì vậy, rất thường xuyên bạn sẽ cần cho user nhập dữ liệu từ bàn phím.
Ví dụ nè:
- Máy tính (calculator) thì chờ bạn nhập số và phép toán.
- Form trên web thì đợi bạn nhập họ tên, e-mail và địa chỉ để xử lý đơn.
- Game hỏi tên người chơi.
Hôm nay tụi mình sẽ cho app của mình cái micro! Hoặc là cái tai, tuỳ bạn thích gọi sao cũng được :) Sẵn sàng chưa? Vô luôn nha.
2. Làm quen với Console.ReadLine()
Console.ReadLine() — là function (hoặc "lệnh") cho phép chương trình lấy dữ liệu mà user nhập từ bàn phím.
Khi chương trình chạy tới lệnh Console.ReadLine(), nó sẽ dừng lại và... kiên nhẫn chờ bạn gõ gì đó rồi bấm Enter. Tất cả những gì bạn nhập trước khi bấm Enter sẽ được coi là một chuỗi text. Chuỗi này sẽ trả về cho chương trình — kiểu như user đưa bạn tờ giấy qua cửa sổ vậy đó.
Ví dụ cơ bản
// Hỏi tên user và chào họ
Console.WriteLine("Tên bạn là gì?");
string userName = Console.ReadLine(); // Ở đây chương trình chờ bạn nhập!
Console.WriteLine("Chào, " + userName + "!");
Nó hoạt động như sau:
- Trên màn hình hiện ra: Tên bạn là gì?
- Bạn nhập, ví dụ, Andrey rồi bấm Enter.
- Biến userName nhận giá trị "Andrey".
- Trên màn hình hiện ra: Chào, Andrey!
Lưu ý liền luôn: tất cả những gì Console.ReadLine() trả về — LUÔN LUÔN là chuỗi (kiểu string). Dù user có nhập số thì nó vẫn là chuỗi nha!
3. Ví dụ
Cùng xem Console.ReadLine() dùng thực tế như nào nha.
Ví dụ 1: nhập tên user
Console.WriteLine("Nhập tên của bạn:");
string name = Console.ReadLine();
Console.WriteLine("Chào mừng, " + name + "!");
Ví dụ 2: in kết quả trên một dòng
Dùng toán tử + bạn có thể nối text và kết quả nhập vào luôn.
Console.Write("Màu bạn thích: ");
string color = Console.ReadLine();
Console.WriteLine("Ngầu ghê! Màu bạn thích là " + color + ".");
trong ví dụ này dùng Console.Write (không xuống dòng mới), để user nhập ngay sau câu hỏi.
Ví dụ 3: nhập nhiều lần liên tiếp
Làm thử cái mini-form nha:
Console.Write("Bạn tên gì? ");
string name = Console.ReadLine();
Console.Write("Bạn bao nhiêu tuổi? ");
string age = Console.ReadLine(); // tạm thời là chuỗi
Console.WriteLine("Bạn tên là " + name + ", và bạn " + age + " tuổi.");
Bạn sẽ thấy:
Bạn tên gì? Vika
Bạn bao nhiêu tuổi? 23
Bạn tên là Vika, và bạn 23 tuổi.
4. Nhập dữ liệu số: chuyển đổi
Đây là cái bẫy phổ biến cho newbie nè! Console.ReadLine() luôn trả về chuỗi, dù user có nhập 123 đi nữa.
Nếu bạn muốn lấy số, phải chuyển chuỗi đó sang kiểu số phù hợp (ví dụ int). Trong C# có mấy method chuyển đổi như int.Parse() hoặc Convert.ToInt32() — tụi mình đã nói ở bài trước rồi.
Ví dụ: hỏi tuổi
Console.Write("Bạn bao nhiêu tuổi? ");
string input = Console.ReadLine(); // input = "27", ví dụ vậy
int age = int.Parse(input); // Chuyển chuỗi "27" thành số 27
Console.WriteLine("Năm sau bạn sẽ " + (age + 1));
nếu user nhập không phải số, chương trình sẽ báo lỗi (FormatException). Sau này tụi mình sẽ học cách code chắc chắn hơn, nhưng cho mấy thử nghiệm đơn giản thì vậy là đủ rồi.
5. Những lỗi chắc chắn bạn sẽ gặp
Quên chuyển sang số:
Thử dùng giá trị từ Console.ReadLine() như số mà không chuyển đổi.
string input = Console.ReadLine();
int sum = input + 5; // Lỗi! Không cộng chuỗi với số được.
Phải chuyển sang int:
int sum = int.Parse(input) + 5;
Quên khai báo biến:
name = Console.ReadLine(); // Lỗi! Chưa khai báo biến name.
Phải khai báo trước: string name = Console.ReadLine();
Lộn thứ tự nhập và xuất:
Newbie hay bị mấy lỗi ngớ ngẩn này lắm. Nhưng pro cũng dính luôn. Chỉ là mặt tỉnh thôi :)
string name = Console.ReadLine();
Console.WriteLine("Nhập tên: " + name); // Phải hỏi trước rồi mới đọc!
Thứ tự đúng nè:
Console.Write("Nhập tên: ");
string name = Console.ReadLine();
Console.WriteLine("Chào, " + name);
Lưu ý hữu ích
Dù bạn dùng Console.ReadLine() mà không in câu hỏi (ví dụ chỉ string x = Console.ReadLine();), chương trình vẫn CHỜ bạn nhập. Nhưng user sẽ không biết phải nhập gì đâu! Vì vậy luôn luôn cho họ gợi ý rõ ràng bằng Console.Write() hoặc Console.WriteLine() nha.
GO TO FULL VERSION