JavaScript is required

Kết quả của đoạn chương trình sau là gì? Nếu gõ vào: “r 45”. char c; int n; scanf(“ % c % d”, & n, & c);

A.

n=45, c=’ ‘

B.

n=45, c=’r’

C.

Lỗi khi xây dựng chương trình

D.

Kết quả khác

Trả lời:

Đáp án đúng: D


Đề bài yêu cầu xác định kết quả của đoạn chương trình C khi thực hiện nhập liệu với định dạng `scanf(" %c %d", &n, &c);`. Điểm mấu chốt ở đây là thứ tự các biến trong chuỗi định dạng của `scanf` và thứ tự các biến được truyền vào hàm. Theo đoạn code `scanf(" %c %d", &n, &c);`, chương trình mong muốn nhập một ký tự (`%c`) và gán nó vào biến `n` (kiểu `int`), sau đó nhập một số nguyên (`%d`) và gán nó vào biến `c` (kiểu `char`). Khi nhập "r 45", `scanf` sẽ cố gắng gán ký tự 'r' vào biến `n` (kiểu int). Trong C, ký tự 'r' có giá trị số tương ứng (trong bảng mã ASCII), giá trị này sẽ được gán cho `n`. Tiếp theo, `scanf` sẽ cố gắng gán số 45 vào biến `c` (kiểu char). Như vậy, `n` sẽ có giá trị là giá trị ASCII của 'r' và `c` sẽ có giá trị 45 (tương ứng với ký tự có mã ASCII là 45). Tuy nhiên, có một lỗi trong đoạn code này. Thứ tự của `%c` và `%d` trong chuỗi định dạng của `scanf` không khớp với thứ tự của `&n` và `&c` trong danh sách các đối số. Vì vậy chương trình sẽ không chạy theo kết quả mà các đáp án đưa ra. Do đó không có đáp án nào đúng trong các đáp án trên.

Câu hỏi liên quan