JavaScript is required

Trong chương trình sau, vòng lặp for sẽ được thực thi trong bao lâu? #include #include void main() { int i = 5; for(;scanf("%d", &i); printf("%d", i)); getch(); }

A.

Vòng lặp for sẽ không được thực thi chút nào

B.

Vòng lặp for sẽ chỉ được thực hiện một lần

C.

Vòng lặp for sẽ được thực hiện 5 lần

D.

Vòng lặp for sẽ được thực thi vô số lần

Trả lời:

Đáp án đúng: D


Trong đoạn chương trình C này, vòng lặp `for` có một điều kiện lặp đặc biệt. Điều kiện lặp không phải là một biểu thức so sánh trực tiếp (ví dụ, `i < 10`), mà là một lệnh gán có kèm theo hàm `scanf`. Hàm `scanf("%d", &i)` cố gắng đọc một số nguyên từ đầu vào chuẩn (thường là bàn phím) và gán giá trị đó cho biến `i`. Điều quan trọng là `scanf` trả về số lượng mục nhập mà nó đã đọc thành công. Nếu `scanf` đọc thành công một số nguyên, nó sẽ trả về 1. Nếu nó không đọc được gì cả (ví dụ: người dùng nhập một chuỗi không phải là số), nó sẽ trả về một giá trị khác 1, thường là `EOF` (End-of-File), một giá trị âm. Do đó, vòng lặp `for` sẽ tiếp tục thực thi miễn là `scanf` trả về 1, tức là đọc thành công một số nguyên. Khi `scanf` không đọc được số nguyên (ví dụ, người dùng nhập chữ hoặc kết thúc luồng nhập), nó sẽ trả về một giá trị khác 1, và vòng lặp sẽ kết thúc. Trong thân vòng lặp, `printf("%d", i)` in giá trị hiện tại của `i` ra màn hình. Vì vậy, vòng lặp sẽ tiếp tục cho đến khi `scanf` không thể đọc được một số nguyên từ đầu vào. Điều này có nghĩa là vòng lặp có thể chạy nhiều lần, phụ thuộc vào đầu vào của người dùng. Vì vậy, đáp án chính xác là: D. Vòng lặp for sẽ được thực thi vô số lần, cho đến khi người dùng nhập vào một giá trị không phải số nguyên, hoặc kết thúc luồng nhập.

Câu hỏi liên quan