IO-DAY2-(fwrit、fread.......)

这段代码包含三个C程序,分别实现了计算文本文件的行数,向文件追加带有时间戳的字符,以及简单的用户注册和登录功能。文件操作涉及读写,注册检查用户名重复,登录验证用户名和密码。
摘要由CSDN通过智能技术生成

作业一、

要求计算一个文件有几行。文件的最后一行也有一个'n'

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

int main(int argc, const char *argv[])
{
    FILE *fp1 = fopen("./1.txt", "r");
    FILE *fp2 = fopen("./2.txt", "w");
    if (NULL == fp1 || NULL == fp2)
    {
        perror("fp1");
        perror("fp2");
        return -1;
    }

    char c[50] = "";
    char a[50] = "";
    int count = 0,count1=1;
    int byt=0;
    while (fgets(c, sizeof(c), fp1) != NULL)
    {

        fputs(c, fp2);
        byt=strlen(c)-1;
        if(c[byt]=='\n')
            count1++;
        count++;
        bzero(c, sizeof(c));

    }

    long size = 0;
    size = ftell(fp2);
    printf("size=%ld\n", size);
    printf("2.txt文件的行数是:%d\n",count1);

    fclose(fp1);
    fclose(fp2);
    return 0;
}

作业二、

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, const char *argv[])
{

    FILE *fp = fopen("./1.txt", "a+");
    if (NULL == fp)
    {
        perror("fp");
        return -1;
    }

    time_t t;

    struct tm *info = NULL;

    char c;
    int n = 0, count = 1;

    while (fscanf(fp, "%c", &c) != EOF)
    {

        if ('\n' == c)
        {
            n = count++;
        }
    }

    while (1)
    {
        int i = 0;
        time(&t);
        info = localtime(&t);

        sleep(1);

        fprintf(fp, "[%d]%d-%02d-%02d %02d:%02d:%02d\n",
                n++, info->tm_year + 1900, info->tm_mon + 1, info->tm_mday,
                info->tm_hour, info->tm_min, info->tm_sec);
        fflush(fp);
        i++;
    }

    fclose(fp);
    return 0;
}

作业三、

实现注册和登录功能

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

typedef struct my_DATE //查重注册时账户重名
{
    char name[100];
    char pw[100];
} Date;

typedef struct DATE //登录功能验证
{
    char name[100];
    char pw[100];
} Date1;

int main(int argc, const char *argv[])
{


    FILE *fp = fopen("./usr.txt", "r+");
    if (NULL == fp)
    {
        perror("fp");
        return -1;
    }

    int count1=0;
    char c;
    while (fscanf(fp, "%c", &c) != EOF)
    {

        if ('\n' == c)
        {
           count1++;
        }
    }
    printf("%d\n",count1);
    Date date1[count1];

    fseek(fp, 0, SEEK_END);

    int n = 0;
    printf("1.注册账户\n");
    printf("2.登录账户\n请输入和功能对应的编号:");
    scanf("%d", &n);

    int count = 0;

    switch (n)
    {
    case 1:
    {
        //=====================================================================
        // 注册功能
        fseek(fp, 0, SEEK_SET);
        char reg_name[20]; // 注册用户名称
        char reg_pw[20];   // 注册用户密码
        int count = 0;
        int i = 1;
        while (i == 1)
        {
            printf("请输入要申请的用户名:");
            scanf("%s", reg_name);
            for (int i = 0; fscanf(fp, "%s %s", date1[i].name, date1[i].pw) != EOF; i++)
            {
                
            }
            
   
            while (strcmp(reg_name, date1[i].name) == 0)
            {
                printf("用户名重复\n");
                return -1;
            }

            printf("请输入一个新密码:");
            scanf(" %s", reg_pw);

            fprintf(fp, "%s", reg_name);
            fprintf(fp, " %s\n", reg_pw);

            count++;
            printf("如果要继续注册请输入“1”,退出请输入“0”");
            scanf(" %d", &i);
        }
    }

    case 2:
    {
        //======================================================================
        // 登录功能
        fseek(fp, 0, SEEK_SET);
        Date1 date[count1];
        
        for (int i = 0; i < count1; i++)
        {
            fscanf(fp, "%s %s", date[i].name, date[i].pw);
        }
        
        
        char my_name[20] = "", my_pw[20] = "";
        printf("请输入用户名:");
        scanf("%s", my_name);
        printf("请输入用户密码:");
        scanf("%s", my_pw);

        for (int i = 0; i < count1; i++)
        {
            if (strcmp(my_name, date[i].name) == 0)
            {
                if (strcmp(my_pw, date[i].pw) == 0)
                {
                    printf("登录成功\n");
                    fclose(fp);
                    return 0;
                }

                printf("密码错误\n");
                fclose(fp);
                return 0;
            }
        }

        printf("账号不存在\n");
    }

    default:
        printf("输入有误\n");
    }

    fclose(fp);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值