鱼C论坛

 找回密码
 立即注册
查看: 1442|回复: 3

读写文件的问题

[复制链接]
发表于 2021-1-21 22:21:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define M 1
  4. struct denglu
  5. {
  6.         char name[10];
  7.         char mima[10];
  8. }person[M];

  9. int main()
  10. {
  11.         int m=0,i,c=0;
  12.         char s;
  13.         char zhanghao[10];
  14.         char zifu[10];
  15.        
  16.         printf("是否已注册?(y/n)\n");
  17.         scanf("%c",&s);
  18.         getchar();
  19.         FILE *fp;
  20.        
  21.         if((fp=fopen("D:\\log.bin","ab+"))==NULL)
  22.         {
  23.                 printf("file open error\n");
  24.                 return 0;
  25.         }
  26.         while(!feof(fp))
  27.         {
  28.                 if(fread(&person[m],sizeof(struct denglu),1,fp)==1)
  29.                 {
  30.                         m++;
  31.                 }       
  32.         }
  33.         fclose(fp);
  34.        
  35.         if((fp=fopen("D:\\log.bin","ab+"))==NULL)
  36.         {
  37.                 printf("file open error\n");
  38.                 return 0;
  39.         }
  40.         printf("m is %d",m);
  41.        
  42.         if(s=='N'||s=='n')
  43.         {
  44.                 if(m==10)
  45.                 {
  46.                         printf("名额已满,您无注册机会\n");       
  47.                        
  48.                 }
  49.                 printf("请设置不超过10个字符的账号\n");
  50.                 gets(person[m].name);
  51.                 printf("账号保存成功!\n");
  52.                 printf("请设置不超过10个字符的密码\n");
  53.                 gets(person[m].mima);
  54.                 printf("密码保存成功!\n");
  55.                
  56.                 //printf("person %d is %s,%s",m,person[0].name,person[0].mima);
  57.                 for(i=0;i<m;i++)
  58.                 {
  59.                         if(fwrite(&person[i],sizeof(struct denglu),1,fp)!=1)
  60.                         {
  61.                                 printf("write error\n");
  62.                         }
  63.                         else
  64.                         {
  65.                                 printf("%s\n",person[i].name);
  66.                                 printf("%s\n",person[i].mima);
  67.                         }
  68.                 }
  69.         }
  70.         fclose(fp);
  71.         return 0;
  72. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-21 23:30:29 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<string.h>

  3. #define M 100

  4. struct denglu
  5. {
  6.         char name[10] ;
  7.         char mima[10] ;
  8. } person[M]           ;

  9. int main()
  10. {
  11.         FILE * fp                                                                     ;
  12.         int k , m = 0 , i                                                             ;
  13.         char s , name[10] , mima[10]                                                  ;
  14.         if((fp = fopen("D:\\log.bin","rb")) != NULL) {
  15.                 fread(& person[m] , sizeof(struct denglu) , 1 , fp)                   ;
  16.                 while(! feof(fp)) {
  17.                         m  ++                                                         ;
  18.                         fread(& person[m] , sizeof(struct denglu) , 1 , fp)           ;
  19.                 }
  20.                 fclose(fp)                                                            ;
  21.         }
  22.         printf("当前在册用户数为 %d \n" , m)                                          ;
  23.         if(m < M) {
  24.                 printf("输入用户名 : ")                                               ;
  25.                 scanf("%s" , name)                                                    ;
  26.                 for(i = 0 ; i < m ; i ++) if(! strcmp(name , person[i] . name)) break ;
  27.                 k = m                                                                 ;
  28.                 if(i == m) {
  29.                         printf("用户不存在!\n")                                      ;
  30.                         printf("现在创建(y / n) ? : ")                                ;
  31.                 } else {               
  32.                         printf("用户已经存在。\n")                                    ;
  33.                         printf("更新密码(y / n) ? : ")                                ;
  34.                 }
  35.                 fflush(stdin)                                                         ;
  36.                 s = getchar()                                                         ;
  37.                 if(s == 'Y' || s == 'y') {
  38.                         printf("输入密码 : ")                                         ;
  39.                         scanf("%s" , mima)                                            ;
  40.                         strcpy(person[i] . name , name)                               ;
  41.                         strcpy(person[i] . mima , mima)                               ;
  42.                         if(i == m) m ++                                               ;
  43.                         if((fp = fopen("D:\\log.bin","wb")) != NULL) {
  44.                                 fwrite(person , sizeof(struct denglu) , m , fp)       ;
  45.                                 fclose(fp)                                            ;
  46.                                 if(i == k) printf("用户创建成功。")                   ;
  47.                                 else printf("密码修改成功。")                         ;
  48.                         } else {
  49.                                 fprintf(stderr , "\n")                                ;
  50.                                 fprintf(stderr , "用户数据文件无法创建。\n")          ;
  51.                                 fprintf(stderr , "\n")                                ;
  52.                         }
  53.                 }
  54.         } else {
  55.                 printf("\n")                                                          ;
  56.                 printf("用户数已满。\n")                                              ;
  57.                 printf("\n")                                                          ;
  58.         }
  59. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-22 10:59:05 | 显示全部楼层

请教:
1、strcpy(person[i] . name , name) 和 person[i].name = name 这2种赋值方法有啥区别
2、fwrite(person , sizeof(struct denglu) , m , fp)  这里的person为什么不用加&person
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-22 11:27:41 | 显示全部楼层
1、字符串赋值不可以用等号,这应该是常识了。
2、person 是结构数组名称,本身就是内存地址,是整个数组在内存中的起始地址。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-2 12:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表