2024.02.18作业

news2025/3/10 20:36:22

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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机学习笔记---AD/DA工作原理(含运算放大器的工作原理)

目录 AD/DA介绍 硬件电路模型 硬件电路 运算放大器 DA原理 T型电阻网络DA转换器 PWM型DA转换器 AD原理 逐次逼近型AD转换器 AD/DA性能指标 XPT2046 XPT2046时序 AD/DA介绍 AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟…

【MySQL】学习多表查询和笛卡尔积

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-N8PeTKG6uLu4bJuM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

JMeter接口测试数据分离驱动应用

步骤&#xff1a; 创建csv文件&#xff0c;编写接口测试用例 新建线程组——创建循环控制器&#xff08;循环次数填用例总数&#xff09; 创建CSV数据文件设置&#xff0c;设置参数。&#xff08;注意&#xff1a;是否允许带引号&#xff1f;&#xff1a;一定要设置为true&a…

10M上下文,仅靠提示就掌握一门语言,Google Gemini 1.5被OpenAI抢头条是真冤

这两天&#xff0c;几乎整个AI圈的目光都被OpenAI发布Sora模型的新闻吸引了去。其实还有件事也值得关注&#xff0c;那就是Google继上周官宣Gemini 1.0 Ultra 后&#xff0c;火速推出下一代人工智能模型Gemini 1.5。 公司首席执行官 Sundar Pichai携首席科学家Jeff Dean等众高…

Python输出改变字体颜色方法(附颜色大全)

一、使用示例 print("\033[31m红色字体\033[0m") print("\033[32m绿色字体\033[0m") print("\033[33m黄色字体\033[0m") print("\033[34m蓝色字体\033[0m") print("\033[35m紫色字体\033[0m") print("\033[36m青色字体…

驶向未来:3D可视化模型重塑我们的道路认知

在科技的浪潮中&#xff0c;每一个革新都是对人类未来生活的深度洞察。而今&#xff0c;当可视化这一技术走进我们的视野&#xff0c;它不仅是一场视觉盛宴&#xff0c;更是一次对未来出行方式的全新探索。 一、从平面到立体&#xff0c;解锁道路新视角 你是否曾站在十字路口&…

【Python如何在列表中随机抽出一个元素】

1、python代码如下&#xff1a; import random a [2, 4, 8, 9, "whats up"] q random.choice(a) # 随机从列表a中输出一个元素 b random.choices(a) # 随机从列表a中取出一个元素输出一个列表 lucky_num random.randint(1, 50) # 随机从1-50中取出一个整数包…

解释 OpenAI Sora 的时空补丁:关键因素

人工智能如何将静态图像转换为动态、逼真的视频&#xff1f;OpenAI 的 Sora 通过创新地使用时空补丁来引入答案。 在快速发展的生成模型领域&#xff0c;OpenAI 的 Sora 脱颖而出&#xff0c;成为一个重要的里程碑&#xff0c;有望重塑我们对视频生成的理解和能力。我们解读了…

【简洁的代码永远不会掩盖设计者的意图】如何写出规范整洁的代码

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

黑马程序员——移动Web——day04

目录&#xff1a; vw适配方案 vw和vh基本使用vw布局vh问题综合案例-酷我音乐 准备工作头部布局头部内容搜索区域banner区域标题公共样式排行榜内容推荐歌单布局推荐歌单内容下载区域头部固定 1.vw适配方案 vw和vh基本使用 vw和vh是相对单位&#xff0c;相对视口尺寸计算结果…

【数据结构】图的存储与遍历

图的概念 图是由顶点集合及顶点间的关系组成的一种数据结构&#xff1a;G (V&#xff0c; E) 图分为有向图和无向图 在有向图中&#xff0c;顶点对<x, y>是有序的&#xff0c;顶点对<x&#xff0c;y>称为顶点x到顶点y的一条边(弧)&#xff0c;<x, y>和&l…

C++学习:list

1.list的定义和结构 list的使用频率不高&#xff0c;在做题时几乎遇不到需要使用list的情景。list是一种双向链表容器&#xff0c;它是标准模板库(STL)提供的一种序列容器。list容器以节点(node的形式存储元素&#xff0c;并使用指针将这些节点链接在一起&#xff0c;形成一个…

【快速解决】python项目打包成exe文件——vscode软件

目录 操作步骤 1、打开VSCode并打开你的Python项目。 2、在VSCode终端中安装pyinstaller&#xff1a; 3、运行以下命令使用pyinstaller将Python项目打包成exe文件&#xff1a; 其中your_script.py是你的Python脚本的文件名。 4、打包完成后&#xff0c;在你的项目目录中会…

如何通过软文引起用户共鸣,媒介盒子支招

不管是哪个行业&#xff0c;哪个品牌都需要通过软文来吸引用户&#xff0c;一篇合格的软文应该能引起用户情绪&#xff0c;让用户为情绪买单&#xff0c;引起用户的共鸣&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;如何通过软文引起用户共鸣。 一、 熟知用户心理情绪 …

开源软件:推动软件行业繁荣的力量

文章目录 &#x1f4d1;引言开源软件的优势分析开放性与透明度低成本与灵活性创新与协作 开源软件对软件行业的影响推动技术创新和进步促进软件行业的合作与交流培养人才和提高技能促进软件行业的可持续发展 结语 &#x1f4d1;引言 随着信息技术的飞速发展&#xff0c;软件已经…

力扣热题100_双指针_11_盛最多水的容器

文章目录 题目链接解题思路解题代码 题目链接 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回…

洛谷P5716 月份天数 题解

#题外话&#xff08;第31篇题解&#xff09;&#xff08;累了&#xff0c;歇会……&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P5716 #思路&#xff08;看代码&#xff09; #代码 代码1&#xff1a;不管三七二十七&#xff0c;直接先判断闰年&#x…

网络原理 - HTTP/HTTPS(1)

HTTP HTTP是什么 HTTP("全程超文本协议")是一种应用非常广泛的应用层协议. 文本:字符串(能在utf8/gbk)码表上找到合法字符. 超文本:不仅是字符串,还能携带图片啥的(HTML). 富文本:类似于word文档这种. HTTP诞生于1991年.目前已经发展为最主流使用的一种应用层协议.…

[Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS 开启AP模式

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[旭日X3派] [Docker实战] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 …

Python:变量与数据类型

目录 一、变量 1.1 强数据类型与弱数据类型 1.2 全局函数 1.3 变量的命名规范 二、数据类型 2.1 基本数据类型 2.2 复合数据类型&#xff08;引用数据类型&#xff09; 三、数据类型转换 一、变量 变量&#xff1a;顾名思义&#xff0c;变化的量。在python中代指运行时…