鱼C论坛

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

读写文件的问题

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

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

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

x
下面代码怎么没法写入文本呢,请帮忙看看
#include<stdio.h>
#include<string.h>
#define M 1
struct denglu
{
        char name[10];
        char mima[10];
}person[M];

int main()
{
        int m=0,i,c=0;
        char s;
        char zhanghao[10];
        char zifu[10]; 
        
        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[m],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[m].name);
                printf("账号保存成功!\n");
                printf("请设置不超过10个字符的密码\n");
                gets(person[m].mima);
                printf("密码保存成功!\n");
                
                //printf("person %d is %s,%s",m,person[0].name,person[0].mima);
                for(i=0;i<m;i++)
                {
                        if(fwrite(&person[i],sizeof(struct denglu),1,fp)!=1)
                        {
                                printf("write error\n");
                        }
                        else
                        {
                                printf("%s\n",person[i].name);
                                printf("%s\n",person[i].mima);
                        }
                }
        }
        fclose(fp);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

#define M 100

struct denglu
{
        char name[10] ;
        char mima[10] ;
} person[M]           ;

int main()
{
        FILE * fp                                                                     ;
        int k , m = 0 , i                                                             ;
        char s , name[10] , mima[10]                                                  ;
        if((fp = fopen("D:\\log.bin","rb")) != NULL) {
                fread(& person[m] , sizeof(struct denglu) , 1 , fp)                   ;
                while(! feof(fp)) {
                        m  ++                                                         ;
                        fread(& person[m] , 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[i] . 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[i] . name , name)                               ;
                        strcpy(person[i] . 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")                                                          ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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