Hỏi về cách sử dụng r+ và w+ trong file C

mọi người giải thích và cho em cách sử dụng mode r+ và w+ với. theo các tài liệu thì cả 2 cái đều có chức năng đọc và ghi mà trong code dưới đây em chạy toàn sai. em tìm trên mạng không thấy có bài nào dùng r+ và w+ cả.

phần code dưới đây là: cho nhập dãy “a 1” vào file sau đó lấy kí tự trong file in ra màn hình:

#include <stdio.h>
int main(){
    char a;
    int b;
    FILE *taptin = NULL;
    taptin = fopen("C:\\Users\\pc\\Desktop\\file1.txt","w+");
    fprintf(taptin, "a 1");
    fscanf(taptin ,"%c %d",&a,&b);
    printf("%a %d",a,b);
    fclose(taptin);  
    return 0;
}

Ở đây có này:
http://www.cplusplus.com/reference/cstdio/fscanf/

Đoạn mã của bạn: Vị trí con trỏ hiện tại đang ở cuối tập tin, phải quay về đầu để đọc. rewind().

5 Likes

cho em hỏi 2 phần code này có gì khác nhau mà kết quả lại khác nhau vậy?

phần 1:

#include <stdio.h>
int main(){
    char a;
    int b;
    FILE *taptin = NULL;
    taptin = fopen("C:\\Users\\pc\\Desktop\\file1.txt","w+");
    
    fprintf(taptin, "a 1");
    
    rewind(taptin);

    fscanf(taptin ,"%c",&a);
    
    fscanf(taptin ,"%d",&b);
    
    fclose(taptin);
    printf("%c %d",a,b);  
    return 0;
}

phần 2:

#include <stdio.h>

int main ()

{

char str ;

int f;

FILE * pFile;

pFile = fopen ("C:\\Users\\pc\\Desktop\\myfile.txt","w+");

fprintf (pFile, "1 a");

rewind (pFile);

fscanf (pFile, "%d", &f);

fflush(pFile);

fscanf (pFile, "%c", &str);

fclose (pFile);

printf ("I have read: %d and %c \n",f,str);

return 0;

}

Đơn giản là khác nhau chỗ này thôi. Bạn đang đọc file mà fflush() thì cũng tương đương với đưa con trỏ về cuối tập tin rồi. :slight_smile:

4 Likes

Đoạn 1 nhìn cũng okie, nhưng đoạn 2 thì về nguyên tắc là ko được vì fflush sau khi fscanf :smiley:

rewind() đưa file offset về 0.

POSIX thì nó ntn

For a stream open for reading with an underlying file description, if the file is not already at EOF, and the file is one capable of seeking, the file offset of the underlying open file description shall be set to the file position of the stream

tức là tùy tâm thôi :smiley: trong trường hợp này đưa đến EOF là khả dĩ vì có mấy byte.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?