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


Đoạn chương trình sử dụng `scanf` để đọc dữ liệu từ đầu vào. Định dạng chuỗi `" %c %d"` chỉ định rằng chương trình sẽ đọc một ký tự (bỏ qua khoảng trắng đầu dòng) và sau đó đọc một số nguyên. Tuy nhiên, có một lỗi quan trọng: thứ tự của các biến trong `scanf` không khớp với thứ tự của các đặc tả định dạng. Cụ thể, `%c` tương ứng với `&n` (địa chỉ của biến số nguyên `n`), và `%d` tương ứng với `&c` (địa chỉ của biến ký tự `c`). Khi người dùng nhập "r 45", chương trình sẽ cố gắng đọc ký tự 'r' vào biến số nguyên `n`. Điều này có thể dẫn đến hành vi không xác định hoặc lỗi tùy thuộc vào trình biên dịch và hệ điều hành. Vì `%c` đọc 'r' vào `n`, giá trị của `n` sẽ là mã ASCII của 'r', thường là 114. Sau đó, `%d` cố gắng đọc số 45 vào biến ký tự `c`. `c` sẽ chứa giá trị 45 (tức là ký tự có mã ASCII là 45, là dấu '-'). Vì câu hỏi đưa ra `scanf(“ % c % d”, & n, & c);` có lỗi về thứ tự biến nên không có đáp án nào đúng.

Tổng hợp 600+ câu hỏi trắc nghiệm lập trình C có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.


22 câu hỏi 60 phút

Câu hỏi liên quan