1
Làm thế nào để đếm số dòng dữ liệu của file trong C?
0
Việt Cuponi70 đã đăng:

Ví dụ một file có nội dung:

Chinese
Vietnamese
Japanese

Thì hàm sẽ trả về giá trị 3 tức là có 3 dòng trong file, ai có cách gì không?

thêm bình luận...
1
Member447210 đã đăng:

Bạn có thể sử dụng hàm fgets để đếm từng dòng của file, sử dụng vòng lặp while lấy giá trị trả về của hàm fgets làm điều kiện dừng, đếm đến khi nào gặp dòng cuối cùng của file, hàm fgets trả về giá trị NULL, vòng lặp sẽ kết thúc, lúc đó bạn sẽ lấy được tổng số dòng sau một hồi tăng biến đếm row cho mỗi dòng trong file được đọc thành công.

#include <stdio.h>

int demSoDong(const char *file_path) {
    char buff[500];
    FILE *f = fopen(file_path, "r");

    if (f == NULL) {
        printf("Khong the mo file de doc.\n");
        return -1;
    }

    int row = 0;
    while (fgets(buff, 500, (FILE*)f)) {
        row++;
    }

    fclose(f);
    return row;
}

int main() {
    int soDong = demSoDong("ten_file.txt");
    printf("%d\n", soDong);
}
đã bổ sung 5.3 năm trước bởi
Avatar: Member4472 Member447210

bạn ơi cái này nó đếm cả dòng cách, có cách hàm nào bỏ không ạ?

Cộng đồng 10.12.2020

Dễ mà, bạn chỉ cần tăng giá trị của row khi dòng đó có chứa ít nhất một ký tự, để làm được điều này thì bạn cần build thêm hàm check nếu chuỗi toàn là ký tự space thì trả về true, không thì trả về false.

bool isStringEmpty(const char *s) {
    while (*s != '\0') {
        if (!isspace((unsigned char)*s))
            return false;
        s++;
    }
    return true;
}

Sau đó update lại hàm while với hàm đã build thì bạn đã loại được trường hợp dòng chứa toàn khoảng cách.

while (fgets(buff, 500, (FILE*)f) && !isStringEmpty(buff)) {
    row++;
}
Cộng đồng 11.12.2020
thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)