If the file "data.txt" contains: Hello World 42 Consider the following complete C program that reads data from a file:

4 phương ánCó giải thích
Đề bài
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *fp = fopen("data.txt", "r");
    char buffer[100];
    int number;

    if (fp != NULL) {
        fgets(buffer, sizeof(buffer), fp);
        fscanf(fp, "%d", &number);
        fclose(fp);
    }
    return 0;
}

What will be stored in the variables after execution?

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "buffer = "Hello World\n", number = 42". Hàm fgets đọc tới hết dòng hoặc tới khi gần đầy vùng đệm, nó giữ lại ký tự xuống dòng rồi mới thêm ký tự kết thúc chuỗi; vùng đệm 100 byte đủ chứa dòng đầu nên buffer nhận trọn Hello World kèm ký tự xuống dòng. Chỉ báo vị trí tệp lúc này nằm ở đầu dòng thứ hai, nên fscanf với đặc tả %d bỏ qua khoảng trắng dẫn đầu, đọc hai chữ số và ghi 42 vào number. Mô tả "buffer = "Hello World", number = 42" bỏ mất ký tự xuống dòng, mà đó đúng là chỗ khác nhau giữa fgets và các hàm đọc dòng kiểu cũ. Mô tả "buffer = "Hello", number = 0" ứng với cách đọc theo từ của scanf với đặc tả chuỗi, còn fgets không dừng ở khoảng trắng. Mô tả "buffer = "Hello World\n", number = undefined" sai ở phần số: dòng thứ hai có số nguyên hợp lệ nên fscanf đọc được và báo đã gán một giá trị.

Cùng phần 9

Xuất hiện trong 2 bộ đề