标准IO函数练习

使用分文件编译,实现注册登录界面,使用已经学过的fgets,fscanf,fpritnf函数

main.c

#include "log.h"

int main(int argc, const char *argv[])
{
    int ch;
    while(1)
    {
        printf("\t\t\t1.注册\n");
        printf("\t\t\t2.登录\n");
        printf("\t\t\t3.退出\n");
        printf("输入你的选择:");
        scanf("%d",&ch);
        getchar();
        switch(ch)
        {
        case 1:
            regist();
            break;
        case 2:
            login();
            break;
        case 3:
            exit(EXIT_SUCCESS);
            break;
        }
    }
    return 0;
}

注册函数

#include "log.h"

int regist()
{
    user reg;//定义注册的结构体
    printf("输入注册的账号:");
    fgets(reg.name,sizeof(reg.name),stdin);
    printf("输入注册的密码:");
    fgets(reg.code,sizeof(reg.code),stdin);

    FILE *fp = fopen("./user.txt","w");
    if(NULL == fp)
    {
        perror("fp");
        return -1;
    }
    //使用fprintf函数写入
    fprintf(fp,"%s%s",reg.name,reg.code);

    printf("注册成功\n");
    fclose(fp);
    return 0;
}

登录函数

fscanf函数在取字符串时遇到'\n'' '等会停止读取

而写的输入代码会把输入的'\n'录入进去,所以在使用strcmp函数时会不相等

解决办法就是把输入进去的字符串的'\n'去掉或者读取出来后加上'\n'

#include "log.h"

int login()
{
    user log,reg;
    printf("输入登录账号:");
    fgets(log.name,sizeof(log.name),stdin);
    printf("输入登录密码:");
    fgets(log.code,sizeof(log.code),stdin);
    printf("%s%s",log.name,log.code);

    //log.name[strlen(log.name)-1] = '\0';//把'\n'换成'\0'
    //log.code[strlen(log.code)-1] = '\0';
    //文件中读取注册的账号密码进行比对
    FILE *fp = fopen("./user.txt","r");
    if(NULL == fp)
    {
        perror("fp");
        return -1;
    }
    fscanf(fp,"%s%s",reg.name,reg.code);
    reg.name[strlen(reg.name)+1] = '\0';
    reg.name[strlen(reg.name)] = '\n';
    reg.code[strlen(reg.code)] = '\n';
    printf("%s%s",reg.name,reg.code);
    if(strcmp(log.name,reg.name)==0&&strcmp(log.code,reg.code)==0)
    {
        printf("登录成功\n");
    }
    else
    {
        puts("失败");
    }
    fclose(fp);
    return 0;
}

.h文件

#ifndef __LOG_H__
#define __LOG_H__
#include <myhead.h>
typedef struct
{
    char name[20];
    char code[20];
}user;

int login();
int regist();


#endif

使用fread和fwrite拷贝文件。

#include <myhead.h>

int main(int argc, const char *argv[])
{
    FILE *fp = fopen("./1.txt", "r");//打开被拷贝的文件
    FILE *fp1 = fopen("./2.txt", "w");//打开拷贝文件
    while(!feof(fp))
    {
        char ch[10] = {0};
        int res = fread(ch, sizeof(char), 10, fp);//一次读一个字符,读10次,res为返回读取的次数
        fwrite(ch, sizeof(char), res, fp1);//写入目标文件
    }
    fclose(fp);
    fclose(fp1);
    char str[40];
    fp1 = fopen("./2.txt","r");
    fread(str,sizeof(str),1,fp1);
    printf("%s",str);
    fclose(fp1);
    return 0;
}

 

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值