2024.02.18作业

1. 使用fgets统计给定文件的行数

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

int main(int argc, char const *argv[])
{
    if (argc != 2)
    {
        puts("input file error");
        puts("usage:./a.out filename");
        return -1;
    }

    FILE* fp = NULL;
    if ((fp = fopen(argv[1], "r")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    int count = 0;
    char buf[5];
    while (1)
    {
        fgets(buf, sizeof(buf), fp);

        if (strlen(buf) == 0)
        {
            break;
        }

        printf("%s", buf);
        for (int i = 0; i < 5; i++)
        {
            if (buf[i] == '\n')
            {
                count++;
            }
        }

        memset(buf, 0, sizeof(buf));
    }

    printf("%d\n", count);

    return 0;
}

2. 使用fputs和fgets完成两个文件的拷贝

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

#define MAXSIZE 10

FILE* open_file(char name[], char method[])
{
    FILE* fp = NULL;
    if ((fp = fopen(name, method)) == NULL)
    {
        return NULL;
    }

    return fp;
}

int main(int argc, char const *argv[])
{
    if (argc != 3)
    {
        puts("input file error");
        puts("usage:./a.out srcfile destfile");
        return -1;
    }

    FILE* fp = open_file(argv[1], "r");
    if (NULL == fp)
    {
        perror("fopen error");
        return -1;
    }

    FILE* fp1 = open_file(argv[2], "w");
    if (NULL == fp1)
    {
        perror("fopen error");
        return -1;
    }

    char buf[MAXSIZE];
    while (1)
    {
        fgets(buf, sizeof(buf), fp);
        if (strlen(buf) == 0)
        {
            break;
        }

        fputs(buf, fp1);

        memset(buf, 0, sizeof(buf));
    }

    fclose(fp);
    fclose(fp1);

    return 0;
}

3. 完成登录注册功能

做个小菜单,功能1是注册功能,输入注册账户和注册密码,将账户和密码写入文件中

功能2是登录功能,提示输入登陆账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配则提示登陆失败

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

#define MAXSIZE 100

FILE* open_file(char name[], char mode[])
{
    FILE* fp = NULL;
    if ((fp = fopen(name, mode)) == NULL)
    {
        return NULL;
    }

    return fp;
}

void read_and_save(FILE* src, FILE* dest)
{
    char buf[MAXSIZE];
    fgets(buf, sizeof(buf), src);
    fputs(buf, dest);
}

void sign_up()
{
    FILE* fp = open_file("test.txt", "a+");
    if (NULL == fp)
    {
        perror("fopen error");
        return;
    }

    printf("请输入用户名:");
    read_and_save(stdin, fp);

    printf("请输入密码:");
    read_and_save(stdin, fp);

    fclose(fp);

    puts("注册成功!");
    puts("");
}

void login()
{
    FILE* fp = open_file("test.txt", "a+");
    if (NULL == fp)
    {
        perror("fopen error");
        return;
    }

    char username[MAXSIZE], passwd[MAXSIZE];
    printf("请输入用户名:");
    fgets(username, sizeof(username), stdin);

    printf("请输入密码:");
    fgets(passwd, sizeof(passwd), stdin);

    char buf1[MAXSIZE], buf2[MAXSIZE];
    while (1)
    {
        fgets(buf1, sizeof(buf1), fp);
        if (strlen(buf1) == 0)
        {
            puts("登录失败!");
            puts("");
            break;
        }
        fgets(buf2, sizeof(buf2), fp);

        if (strcmp(username, buf1) == 0 && strcmp(passwd, buf2) == 0)
        {
            puts("登录成功!");
            puts("");
            break;
        }

        memset(buf1, 0, sizeof(buf1));
        memset(buf2, 0, sizeof(buf2));
    }

    fclose(fp);
}

int main(int argc, char const *argv[])
{
    int flag = 1;
    while (flag)
    {
        printf("====================\n");
        printf("------ 登录界面 -----\n");
        printf("-------1、注册-------\n");
        printf("-------2、登录-------\n");
        printf("-------0、退出-------\n");
        printf("====================\n");
        printf("请输入选项:");

        int menu;
        scanf("%d", &menu);
        getchar();

        switch (menu)
        {
        case 1:
            sign_up();
            break;
        case 2:
            login();
            break;
        case 0:
            flag = 0;
            break;
        default:
            break;
        }

    }

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/393383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读笔记】Contrastive Learning with Stronger Augmentations

Contrastive Learning with Stronger Augmentations 摘要 基于提供的摘要&#xff0c;该论文的核心焦点是在对比学习领域提出的一个新框架——利用强数据增强的对比学习&#xff08;Contrastive Learning with Stronger Augmentations&#xff0c;简称CLSA&#xff09;。以下…

黑猫带你学NandFlash第5篇:NAND的封装与引脚定义

本文依据ONFI5.1及个人工作经验整理而成&#xff0c;如有错误请留言。 文章为付费内容&#xff0c;已加入原创侵权保护&#xff0c;禁止私自转载及抄袭。 文章所在专栏&#xff1a;《黑猫带你学&#xff1a;NandFlash详解》 1 封装类型 spec中规定nand封装尺寸有以下几种&…

.螺旋矩阵

54. 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#xff1a;ma…

【FastAPI】P1 安装与第一个 FastAPI 应用

目录 FastAPI 安装第一个 FastAPI 应用代码拆解分析 FastAPI 安装 FastAPI 是用于快速构建 API 的 web 框架&#xff0c;依赖 Python 3.8 及更高版本。使用 pip 命令安装 fastapi&#xff1a; pip install fastapi安装异步处理 ASGI 的服务器 Uvicorn&#xff1a; pip insta…

HAL STM32通过multi_button库处理按键事件

HAL STM32通过multi_button库处理按键事件 &#x1f4cd;作者&#xff1a;0x1abin的multi_button库:https://github.com/0x1abin/MultiButton &#x1f4d8;MultiButton简介 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块&#xff0c;可无限量扩展按键&#xff0c;…

分享一个学英语的网站

名字叫&#xff1a;公益大米网​​​​​​​ Freerice 这个网站是以做题的形式来记忆单词&#xff0c;题干是一个单词&#xff0c;给出4个选项&#xff0c;需要选出其中最接近题干单词的选项。 答对可以获得10粒大米&#xff0c;网站的创办者负责捐赠。如图 触发某些条件&a…

解锁Spring Boot中的设计模式—05.策略模式:探索【策略模式】的奥秘与应用实践!

1.策略者工厂模式&#xff08;Map版本&#xff09; 1.需求背景 假设有一个销售系统&#xff0c;需要根据不同的促销活动对商品进行打折或者其他形式的优惠。这些促销活动可以是针对不同商品类别的&#xff0c;比如男装、女装等。 2.需求实现 活动策略接口&#xff1a;定义了…

Docker数据卷容器(容器继承)

Docker数据卷容器&#xff08;容器继承&#xff09; 创建DockerFile构建镜像启动容器修改数据卷创建子容器验证 命名的容器挂载数据卷。其他容器通过挂载这个容器实现数据共享&#xff0c;挂载数据的容器 -> 称之为数据卷容器 创建DockerFile FROM centosVOLUME ["dat…

哪个牌子的洗地机好用?性能超好的洗地机推荐

洗地机已经是家庭中不可或缺的清洁家电之一了&#xff0c;它的出现极大地方便了我们的生活&#xff0c;并为我们解决了一大难题&#xff1a;洗地板的繁琐。无论是家庭主妇还是上班族&#xff0c;对于洗地机的需求都是无可替代的。随着科技的不断进步&#xff0c;洗地机的功能也…

上门回收小程序开发,互联网下发展机遇

在当下生活水平大幅度上升发展下&#xff0c;回收成为了人们日常生活中的一部分。 如今&#xff0c;随着互联网的快速发展&#xff0c;回收行业也进行了升级换代&#xff0c;由传统的线下回收门店到回收箱在到当下的线上互联网回收模式&#xff0c;迈向了“互联网废品回收”的…

安装ts-node有感

起因&#xff1a;想要在vsCode上运行ts脚本 解决方案&#xff1a; 1.安装vsCode插件 code runner 2.全局安装ts-node 这一步遇到三个问题&#xff1a; ①.node版本问题&#xff1a;需安装版本18以上node&#xff0c;可使用nvm去控制不同的node版本 ②.certificate has exp…

【以解决】Pyinstaller打包报错IndexError: tuple index out of range

问题 这个问题主要是在Python3.7以上的版本中遇到&#xff0c;用pyinstaller打包的时候发现报错 (pyinstallerEnv) D:\virtualEnv\pyinstallerEnv\Scripts>auto-py-to-exe pygame 2.5.2 (SDL 2.28.3, Python 3.10.0) Hello from the pygame community. https://www.pygame…

PCIe TX端电容

一、问题&#xff1a;PCIe为什么要加电容 PCIe为什么要加电容&#xff1f;具体的作用是什么&#xff1f; 答&#xff1a;因为PCIe Host和Receiver两端的直流偏置会不一样&#xff0c;所以需要在PCIe的传输路径上加电容&#xff0c;这样传输路径上只有AC信号&#xff0c;不存在…

const--类的常量成员函数

在C中,为了禁止成员函数修改数据成员的值,可以将它设置为常量成员函数。设置常量成员函数的方法是在函数原型的后面加上const,形式如下: class x { …………… T f(t1,t2) const{} ………… }; 常量成员函数的作用&#xff1a; 将成员函数设置为const&#xff0c;表明该成员函…

MySQL跨服务器关联查询

1. 首先确认服务器的Federated引擎是否开启 show engines;修改数据库的配制文件my.ini,(我的my.ini的路径为&#xff1a;D:\ProgramData\MySQL\MySQL Server 5.7/my.ini),将federated添加到my.ini文件中 到MySQL的my.cnf配置文件中修改 在 [mysqld] 下方加入 federated 然后重…

CentOS 7.9如何禁止内核自动更新升级

要在 CentOS 7.9 系统中禁止内核自动更新&#xff0c;你可以通过配置 YUM&#xff08;Yellowdog Updater, Modified&#xff09;来实现。这里有几种方法可以阻止内核自动更新&#xff1a; 方法 1: 使用 exclude 选项在 YUM 配置中 编辑 YUM 的配置文件 /etc/yum.conf&#xff…

[SWPUCTF 2021 新生赛]crypto8

第一眼看见是乱码不确定是什么的编码 看了下感觉是UUencode编码 UUencode编码是一种古老的编码方式&#xff0c;通常用于将二进制数据转换成可打印字符的形式。UUencode编码采用一种基于64个字符的编码表&#xff0c;将每3个字节的数据编码为4个可打印字符&#xff0c;以实现…

C++类和对象——继承详解

目录 1.基本语法 2.继承方式 3.继承中的对象模型 4.构造和构析顺序 5.同名成员处理 6.同名静态成员处理 7.多继承语法 8.菱形继承 图片示例&#xff1a; 虚继承 代码示例&#xff1a; 1.基本语法 #include<bits/stdc.h> using namespace std;//公共页面类 …

心法利器[107] onnx和tensorRT的bert加速方案记录

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会&#xff0c;与大家一起成长。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2023年新一版的文章合集已经发布&#xff0c;获取方式看这里&#xff1a;又添十万字-CS的陋室2…

深度学习基础之《TensorFlow框架(4)—Operation》

一、常见的OP 1、举例 类型实例标量运算add&#xff0c;sub&#xff0c;mul&#xff0c;div&#xff0c;exp&#xff0c;log&#xff0c;greater&#xff0c;less&#xff0c;equal向量运算concat&#xff0c;slice&#xff0c;splot&#xff0c;canstant&#xff0c;rank&am…