Nội dung
Trong bài viết này, chúng ta sẽ học cách lấy đầu vào (input) từ user và hiển thị đầu ra (output) trong ngôn ngữ lập trình C# Console bằng nhiều phương pháp khác nhau.
1. C# Output – Xuất dữ liệu trong C#
Để xuất nội dung trong C#, chúng ta có thể sử dụng:
System.Console.WriteLine() OR
System.Console.Write()
Ở đây, System là một namespace, Console là lớp bên trong namespace System và WriteLine và Write là phương thức của lớp Console.
Hãy xem ví dụ in chuỗi ra màn hình output dưới đây:
1.1 Ví dụ 1: In chuỗi sử dụng WriteLine()
using System;
namespace Sample
{
class Test
{
public static void Main(string[] args)
{
Console.WriteLine(“C# is cool”);
}
}
}
Khi chạy chương trình, output sẽ hiển thị
C# is cool
1.2 Sự khác biệt giữa phương thức WriteLine() và Write()
Sự khác biệt cơ bản của WriteLine() và Write() là phương thức Write() chỉ in chuỗi được cung cấp, trong khi phương thức WriteLine() in chuỗi và chuyển đến đầu dòng tiếp theo.
Hãy cùng xem ví dụ dưới đây để hiểu rõ sự khác biệt giữa hai phương thức này.
Ví dụ 2: Cách sử dụng phương thức WriteLine() và Write()
using System;
namespace Sample
{
class Test
{
public static void Main(string[] args)
{
Console.WriteLine(“Prints on “);
Console.WriteLine(“New line”);
Console.Write(“Prints on “);
Console.Write(“Same line”);
}
}
}
Khi chạy chương trình, output sẽ hiển thị
Prints on
New line
Prints on Same line
1.3 In Variable và Literal sử dụng phương thức WriteLine() và Write()
Phương thức WriteLine() và phương thức Write() có thể sử dụng để in biến và hằng. Hãy xem ví dụ dưới đây:
Ví dụ 3: In biến và hằng
using System;
namespace Sample
{
class Test
{
public static void Main(string[] args)
{
int value = 10;
// Variable
Console.WriteLine(value);
// Literal
Console.WriteLine(50.05);
}
}
}
Khi chạy chương trình, output sẽ hiển thị
10
50.05
1.4 Kết hợp (nối) hai chuỗi sử dụng toán tử cộng (+) và in chúng
Các chuỗi có thể được kết hợp / nối (concatenated string) bằng cách sử dụng toán tử + trong khi in.
Ví dụ 4: In chuỗi kết hợp bằng toán tử +
using System;
namespace Sample
{
class Test
{
public static void Main(string[] args)
{
int val = 55;
Console.WriteLine(“Hello ” + “World”);
Console.WriteLine(“Value = ” + val);
}
}
}
Khi chạy chương trình, output sẽ hiển thị
Hello World
Value = 55
1.5 In chuỗi kết hợp bằng chuỗi đã được định dạng (Formatted String)
Một giải pháp tốt hơn để in chuỗi kết hợp là sử dụng chuỗi đã được định dạng. Formatted string cho phép lập trình viên sử dụng trình giữ chỗ (placeholder) cho các biến. Ví dụ như dòng sau:
Console.WriteLine(“Value = ” + val);
Có thể thay thế bởi:
Console.WriteLine(“Value = {0}”, val);
{0} là trình giữ chỗ cho biến val , nó sẽ bị thay thế bởi giá trị của val. Chỉ có 1 biến được sử dụng nên chỉ có một placeholder.
Nhiều biến có thể được sử dụng trong formatted string. Hãy cùng tham khảo ví dụ dưới đây:
Ví dụ 5: In chuỗi kết hợp bằng String formatting
using System;
namespace Sample
{
class Test
{
public static void Main(string[] args)
{
int firstNumber = 5, secondNumber = 10, result;
result = firstNumber + secondNumber;
Console.WriteLine(“{0} + {1} = {2}”, firstNumber, secondNumber, result);
}
}
}
Khi chạy chương trình, output sẽ hiển thị
5 + 10 = 15
Ở đây, {0} bị thay thế bởi firstNumber, {1} bịthay thế bởi secondNumber và{2} bị thay thế bởi result.
Cách tiếp cận output in này dễ đọc hơn và ít bị lỗi hơn toán tử +.
Để biết thêm về chuỗi được định dạng, hãy truy cập C# string formatting.
2. C# Input – Nhập dữ liệu trong C#
Trong C#, cách đơn giản nhất để lấy input từ user là sử dụng phương thức ReadLine() của lớp Console. Tuy nhiên, Read() và ReadKey() cũng có thể làm điều đó được. Hai phương thức này cùng thuộc lớp Console.
2.1 Ví dụ 6: Lấy chuỗi Input từ User
using System;
namespace Sample
{
class Test
{
public static void Main(string[] args)
{
string testString;
Console.Write(“Enter a string – “);
testString = Console.ReadLine();
Console.WriteLine(“You entered ‘{0}'”, testString);
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
Enter a string – Hello World
You entered ‘Hello World’
1.2 Sự khác nhau của phương thức ReadLine(), Read() và ReadKey():
3 phương thức trên khác nhau như sau:
- ReadLine(): Phương thức ReadLine() đọc dòng tiếp theo của input (từ dòng input chuẩn). Nó trả về cùng một chuỗi.
- Read(): Phương thức Read() đọc ký tự tiếp theo từ dòng input chuẩn. Nó trả về giá trị Ascii của ký tự.
- ReadKey(): Phương thức ReadKey() tiếp nhận phím tiếp theo mà user nhấn. Phương pháp này thường được sử dụng để giữ màn hình không hiển thị output cho đến khi người dùng nhấn một phím.
Ví dụ 7: Sự khác nhau của phương thức Read() và ReadKey()
using System;
namespace Sample
{
class Test
{
public static void Main(string[] args)
{
int userInput;
Console.WriteLine(“Press any key to continue…”);
Console.ReadKey();
Console.WriteLine();
Console.Write(“Input using Read() – “);
userInput = Console.Read();
Console.WriteLine(“Ascii Value = {0}”,userInput);
}
}
}
Khi chạy chương trình, output sẽ hiển thị
Press any key to continue…
x
Input using Read() – Learning C#
Ascii Value = 76
Từ ví dụ trên, bạn có thể thấy cách hoạt động của Console.ReadKey() và Console.Read(). Khi sử dụng Console.ReadKey(), khi nhấn phím bất kỳ màn hình sẽ hiển thị kết quả.
Khi sử dụng Console.Read(), bạn sẽ phải viết cả dòng lệnh trong khi nó chỉ trả về giá trị ASCII value của ký tự đầu tiên. Trong ví dụ này, 76 là giá trị ASCII của L.
2.3 Đọc các giá trị số
Việc đọc một ký tự hoặc chuỗi rất đơn giản trong C #. Tất cả những gì bạn cần làm là gọi đúng tên các phương thức tương ứng.
Tuy nhiên, việc đọc các giá trị số có thể khá phức tạp.
Chúng ta sẽ vẫn sử dụng cùng một phương thức ReadLine(). Nhưng vì phương thức này nhận đầu vào là chuỗi, nên nó cần được chuyển đổi thành kiểu số nguyên hoặc dấu chấm động.
Một cách tiếp cận đơn giản để chuyển đổi đầu vào là sử dụng các phương thức của lớp Convert .
Ví dụ 8: Đọc các giá trị số của User bằng cách sử dụng lớp Convert
using System;
namespace UserInput
{
class MyClass
{
public static void Main(string[] args)
{
string userInput;
int intVal;
double doubleVal;
Console.Write(“Enter integer value: “);
userInput = Console.ReadLine();
/* Converts to integer type */
intVal = Convert.ToInt32(userInput);
Console.WriteLine(“You entered {0}”,intVal);
Console.Write(“Enter double value: “);
userInput = Console.ReadLine();
/* Converts to double type */
doubleVal = Convert.ToDouble(userInput);
Console.WriteLine(“You entered {0}”,doubleVal);
}
}
}
Khi chạy chương trình, output sẽ hiển thị
Enter integer value: 101
You entered 101
Enter double value: 59.412
You entered 59.412
Phương thức ToInt32() và ToDouble() của Convert class chuyển đổi input thành kiểu integer và double. Tương tự, chúng ta có thể chuyển đổi input sang các kiểu khác. Đây là Danh sách đầy đủ các phương thức có sẵn cho Convert class.
Có nhiều cách khác để lấy input số từ user. Chúng tôi sẽ giới thiệu trong những bài viết sau.