30/09/2018, 17:12

Lỗi khi ghi và đọc file cùng lúc

Trước giờ em giải thuật thì chỉ có freopen, bây giờ học đọc ghi file bằng mấy lệnh khác (fopen, fprintf, fgetc, …).
Cho em hỏi là em cần ghi dòng Hello World vào file, xong dùng fgetc cùng vòng lặp để đọc và in ra từng kí tự (nói chung là in ra lại dòng Hello World file ra console)

Đây là code của em

    FILE* file = NULL;
    file = fopen("test.txt", "r+");


    fputs("Hello World", file);

    char word;
    do{
        word = fgetc(file);
        std::cout << word;
    }while(word != EOF);

    fclose(file);

Thế nhưng em gặp chuyện là nếu em code như thế, thì nội dung file em xem được sẽ là Hello World cùng một đống chữ NULL phía sau
Và in ra Console thì toàn kí tự trắng (chắc là NULL :v)

Nhưng khi em làm từng công việc, bỏ phần vòng lặp đi, chỉ ghi vào file thôi thì vẫn bình thường, sau đó bỏ phần ghi và thêm lại phần vòng lặp, thì vẫn in ra console là Hello World.

Mọi người giải thích và giup em sửa với.

Mai Anh Dũng viết 19:20 ngày 30/09/2018

Gửi toàn bộ code lên Đạt debug thử

nhatlonggunz viết 19:28 ngày 30/09/2018

Code thì chỉ thêm main với mấy cái Include

#include <iostream>
#include <cstdio>
#include <cstdlib>

int main()
{
    FILE* file = NULL;
    file = fopen("test.txt", "r+");


    fputs("Hello World", file);

    char word;
    do{
        word = fgetc(file);
        std::cout << word;
    }while(word != EOF);

    fclose(file);
    return 0;
}

Dạ đây là kết quả khi run

Mai Anh Dũng viết 19:20 ngày 30/09/2018

À, anh hiểu ý em muốn làm gì rồi. Trước hết em phải rewind tức đưa đầu đọc về vị trí đầu file.

Tiếp theo đó là em phải đổi lại cái do .. while thành while để tránh đọc ký tự EOF

#include <iostream>
#include <cstdio>
#include <cstdlib>

int main()
{
    FILE* file = NULL;
    file = fopen("test.txt", "r+");

    if (!file) {
        printf("can not open test.txt");
        return 1;
    }

    fputs("Hello World", file);
    rewind(file);

    char word = fgetc(file);
    while(word != EOF) {
        std::cout << word;
        word = fgetc(file);
    }

    fclose(file);
    return 0;
}
Bài liên quan
0