首页 > 解决方案 > 如何在c中使用fread逐行读取

问题描述

我的 fread 有问题,我的程序只读取文件中的第一行。我使用结构将数据保存到文件并临时获取数据以检查状态。如果使用 fgets 我不知道如何将结构中的每个数据带到临时结构中进行检查

#include<stdio.h>
#include<string.h>
struct data
{ 
char uname[30], pass[30], nama[30], alamat[30], nomer[30];
} real,temp;

int userchecker(FILE *ptr);
void regist(FILE *ptr);
int main(){
    FILE *ptr;
    printf("\n\nSelamat Datang Di D'Medicine");
    printf("\n\n============================\n");

    printf("Silahkan ");

    printf("Username :");
    scanf(" %[^\n]", &real.uname);
    if(userchecker(ptr) == 0){
    printf("====registrasi akun======\n");
    printf("Nama :");
    scanf(" %[^\n]", &real.nama);
    printf("pass :");
    scanf(" %[^\n]", &real.pass);
    printf("Alamat :");
    scanf(" %[^\n]", &real.alamat);
    printf("Nomer Telepon :");
    scanf(" %[^\n]", &real.nomer);
    regist(ptr);
    }else{
        printf("sudah terdaftar\n");
        printf("%s %s\n", temp.uname,temp.nama);
    }
return 0;
}
int userchecker(FILE *ptr){
    int flag = 0;
    ptr = fopen("data.bin","rb");
    if(ptr == NULL){
        printf("file error\n");
        flag = 1;
    }else{
        while(fread(&temp, sizeof(struct data),1,ptr)){
            if(strcmp(real.uname,temp.uname)==0){
                flag = 0;
                break;
            }
            else{
                flag = 1;
            }
        }
        if(flag == 1){
            printf("data tidak ditemukan\n");
            return 0;
        }else{
            return 1;
        }
    fclose(ptr);
    }
    
}
void regist(FILE *ptr){
    ptr = fopen("data.bin","ab");
    fwrite(&real, sizeof(struct data), 1, ptr);
    fwrite("\n", sizeof(char), 1, ptr);
    printf("data registed");
    fclose(ptr);
}
    

标签: c

解决方案


推荐阅读