Menu
CoddyTech

Đọc đầu vào bằng readline()

Thuộc phần Kiến thức nền tảng trong hành trình R của Coddy. Bài học 29 trên 78.

Đến đây, bạn đã học cách hiển thị đầu ra. Bây giờ là lúc làm cho chương trình tương tác bằng cách đọc đầu vào từ người dùng. Hàm (function) readline() cho phép bạn ghi nhận nội dung người dùng nhập.

name <- readline()
cat("Hello,", name, "\n")

Khi đoạn code này chạy trong một phiên R tương tác (bảng điều khiển R hoặc RStudio), R chờ người dùng nhập nội dung rồi nhấn Enter. Nội dung họ nhập sẽ được lưu vào biến name. Nếu người dùng nhập "Alice", đầu ra sẽ là: Hello, Alice

Trên nền tảng này, code của bạn chạy dưới dạng tập lệnh với Rscript, vì vậy readline() không chờ mà trả về ngay một chuỗi rỗng "". Đó là lý do code khởi đầu của thử thách trong bài học này đọc đầu vào bằng readLines().

Một điều quan trọng cần biết: readline() luôn trả về một chuỗi (string), ngay cả khi người dùng nhập một số. Nếu ai đó nhập "25", giá trị đó được lưu dưới dạng văn bản "25", không phải số 25. Bạn sẽ học cách chuyển đổi giữa các kiểu dữ liệu ở bài học tiếp theo.

Bạn có thể đọc nhiều đầu vào bằng cách dùng readline() nhiều lần:

first <- readline()
second <- readline()
cat("First:", first, "\n")
cat("Second:", second, "\n")

Trong một phiên tương tác, mỗi lần gọi readline() sẽ chờ người dùng nhập một dòng riêng.

Khi kết hợp văn bản với các biến bằng cat(), mỗi mục được ngăn cách bằng dấu phẩy sẽ có một dấu cách ở giữa. Đôi khi bạn cần nối văn bản mà không có dấu cách, chẳng hạn như khi gắn dấu câu trực tiếp vào một từ. Khi đó, paste0() rất hữu ích. Hàm này nối các chuỗi mà không có dấu phân cách giữa chúng:

city <- readline()
cat("Welcome to", paste0(city, "!"), "\n")

Ở đây, paste0(city, "!") nối giá trị của city với "!" mà không có khoảng trắng, nên nếu người dùng nhập "Paris", đầu ra là: Welcome to Paris!

challenge icon

Thử thách

Dễ

Đọc hai dòng đầu vào và hiển thị lời chào cá nhân hóa.

Bạn sẽ nhận được hai đầu vào (input):

  1. Tên
  2. Tên thành phố

Đoạn code khởi đầu đã đọc cả hai đầu vào vào name và city bằng readLines(), vì readline() chỉ hoạt động trong phiên tương tác và không nhận được dữ liệu nào ở đây. Hiển thị thông báo theo định dạng sau:

Welcome, [name] from [city]!

Dùng cat() để tạo đầu ra (output). Nhớ thêm dấu chấm than ở cuối và ký tự xuống dòng \n.

Ví dụ: nếu đầu vào là Emma và Paris, đầu ra sẽ là:

Welcome, Emma from Paris!

Tự làm thử

# Đọc đầu vào (input)
con <- file("stdin", "r")
name <- suppressWarnings(readLines(con, n = 1))
city <- suppressWarnings(readLines(con, n = 1))

# TODO: Viết code bên dưới để hiển thị lời chào
# Dùng cat() để in ra: Welcome, [name] from [city]!
# Đừng quên ký tự (character) xuống dòng \n ở cuối
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch R online