dysow 发表于 2021-1-21 22:21:57

读写文件的问题

下面代码怎么没法写入文本呢,请帮忙看看

#include<stdio.h>
#include<string.h>
#define M 1
struct denglu
{
        char name;
        char mima;
}person;

int main()
{
        int m=0,i,c=0;
        char s;
        char zhanghao;
        char zifu;
       
        printf("是否已注册?(y/n)\n");
        scanf("%c",&s);
        getchar();
        FILE *fp;
       
        if((fp=fopen("D:\\log.bin","ab+"))==NULL)
        {
                printf("file open error\n");
                return 0;
        }
        while(!feof(fp))
        {
                if(fread(&person,sizeof(struct denglu),1,fp)==1)
                {
                        m++;
                }       
        }
        fclose(fp);
       
        if((fp=fopen("D:\\log.bin","ab+"))==NULL)
        {
                printf("file open error\n");
                return 0;
        }
        printf("m is %d",m);
       
        if(s=='N'||s=='n')
        {
                if(m==10)
                {
                        printf("名额已满,您无注册机会\n");       
                       
                }
                printf("请设置不超过10个字符的账号\n");
                gets(person.name);
                printf("账号保存成功!\n");
                printf("请设置不超过10个字符的密码\n");
                gets(person.mima);
                printf("密码保存成功!\n");
               
                //printf("person %d is %s,%s",m,person.name,person.mima);
                for(i=0;i<m;i++)
                {
                        if(fwrite(&person,sizeof(struct denglu),1,fp)!=1)
                        {
                                printf("write error\n");
                        }
                        else
                        {
                                printf("%s\n",person.name);
                                printf("%s\n",person.mima);
                        }
                }
        }
        fclose(fp);
        return 0;
}

jackz007 发表于 2021-1-21 23:30:29

#include<stdio.h>
#include<string.h>

#define M 100

struct denglu
{
      char name ;
      char mima ;
} person         ;

int main()
{
      FILE * fp                                                                     ;
      int k , m = 0 , i                                                             ;
      char s , name , mima                                                ;
      if((fp = fopen("D:\\log.bin","rb")) != NULL) {
                fread(& person , sizeof(struct denglu) , 1 , fp)                   ;
                while(! feof(fp)) {
                        m++                                                         ;
                        fread(& person , sizeof(struct denglu) , 1 , fp)         ;
                }
                fclose(fp)                                                            ;
      }
      printf("当前在册用户数为 %d \n" , m)                                          ;
      if(m < M) {
                printf("输入用户名 : ")                                             ;
                scanf("%s" , name)                                                    ;
                for(i = 0 ; i < m ; i ++) if(! strcmp(name , person . name)) break ;
                k = m                                                               ;
                if(i == m) {
                        printf("用户不存在!\n")                                    ;
                        printf("现在创建(y / n) ? : ")                              ;
                } else {               
                        printf("用户已经存在。\n")                                    ;
                        printf("更新密码(y / n) ? : ")                              ;
                }
                fflush(stdin)                                                         ;
                s = getchar()                                                         ;
                if(s == 'Y' || s == 'y') {
                        printf("输入密码 : ")                                       ;
                        scanf("%s" , mima)                                          ;
                        strcpy(person . name , name)                               ;
                        strcpy(person . mima , mima)                               ;
                        if(i == m) m ++                                             ;
                        if((fp = fopen("D:\\log.bin","wb")) != NULL) {
                              fwrite(person , sizeof(struct denglu) , m , fp)       ;
                              fclose(fp)                                          ;
                              if(i == k) printf("用户创建成功。")                   ;
                              else printf("密码修改成功。")                         ;
                        } else {
                              fprintf(stderr , "\n")                              ;
                              fprintf(stderr , "用户数据文件无法创建。\n")          ;
                              fprintf(stderr , "\n")                              ;
                        }
                }
      } else {
                printf("\n")                                                          ;
                printf("用户数已满。\n")                                              ;
                printf("\n")                                                          ;
      }
}

dysow 发表于 2021-1-22 10:59:05

jackz007 发表于 2021-1-21 23:30


请教:
1、strcpy(person . name , name) 和 person.name = name 这2种赋值方法有啥区别
2、fwrite(person , sizeof(struct denglu) , m , fp)这里的person为什么不用加&person

jackz007 发表于 2021-1-22 11:27:41

1、字符串赋值不可以用等号,这应该是常识了。
2、person 是结构数组名称,本身就是内存地址,是整个数组在内存中的起始地址。
页: [1]
查看完整版本: 读写文件的问题