Cho đoạn chương trình sau. Giả sử khi chạy chương trình ta gõ từ bản phím: “29h b”. Kết quả in ra n và c tương ứng sẽ là: #include
Trả lời:
Đáp án đúng: C
Đề bài cho đoạn chương trình C và yêu cầu xác định kết quả in ra khi nhập một chuỗi cụ thể.
Phân tích đoạn chương trình:
- `scanf(" %d %c", &n, &c);` : Đoạn code này đọc dữ liệu từ đầu vào chuẩn (bàn phím). "%d" đọc một số nguyên và gán cho biến `n`. " %c" (chú ý khoảng trắng trước %c) đọc một ký tự và gán cho biến `c`. Khoảng trắng trước `%c` có vai trò quan trọng: nó bỏ qua mọi ký tự khoảng trắng (space, tab, newline) ở đầu vào cho đến khi gặp một ký tự khác không phải khoảng trắng.
- `printf(" %3d %c", n, c);`: Đoạn code này in ra giá trị của `n` và `c`. "%3d" in số nguyên `n` với độ rộng tối thiểu là 3. Nếu `n` có ít hơn 3 chữ số, nó sẽ được căn phải và thêm khoảng trắng vào bên trái. "%c" in ký tự `c`.
Phân tích đầu vào "29h b":
1. `scanf(" %d %c", &n, &c)`: `%d` đọc "29" và gán cho `n`, vậy `n = 29`. Sau đó, `%c` đọc ký tự 'h' và gán cho `c`, vậy `c = 'h'`. Ký tự ' ' và 'b' sẽ còn lại trong bộ đệm đầu vào, nhưng không được sử dụng.
2. `printf(" %3d %c", n, c)`: In `n` (29) với định dạng `%3d`, kết quả là " 29" (có một khoảng trắng ở đầu). Sau đó in `c` ('h').
Kết quả in ra sẽ là " 29h".