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 10FILE* 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 100FILE* 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.hqwc.cn/news/476035.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win32汇编数组学习2

之前学习过win32汇编数组&#xff1b;还不熟悉&#xff1b;继续熟悉&#xff1b; 先做几个基本的对话框&#xff0c;有一个静态文本框&#xff1b; 定义数组之后&#xff0c;用 wsprintf 函数格式化&#xff0c;然后调用 SetDlgItemText 赋值给静态文本框&#xff1b; arr1 …

快速排序(2)——快速排序的优化

因为Hoare的快速排序写起来容易出错&#xff0c;并且有很多地方不太合适&#xff0c;于是&#xff0c;就有了一下几种优化。 基准值的优化 如果我们一直选取一组数据的第一个数据为基准值&#xff0c;如果遇到重复少的值的化&#xff0c;没什么问题。但是如果重复的值比较多的…

AI生图软件:让创意无限飞扬

随着科技的飞速发展&#xff0c;人工智能(AI)已经逐渐渗透到我们的日常生活之中&#xff0c;其中包括图像编辑。AI生图软件就是这样一种应用了AI技术的创新产品&#xff0c;它正在改变着图像编辑的方式&#xff0c;让我们能够以前所未有的方式创作和分享视觉内容。 一、什么是A…

代码检测规范和git提交规范

摘要&#xff1a;之前开发的项目&#xff0c;代码检测和提交规范都是已经配置好的&#xff0c;最近自己新建的项目就记录下相关配置过程。 1. ESlint配置 2013年6月创建开源项目&#xff0c;提供一个插件化的JavaScript代码检测工具&#xff0c;创建项目是生成的eslintrc.js文…

基于TensorFlow的LibriSpeech语音识别

一、引言 随着人工智能技术的日益成熟&#xff0c;深度学习在语音识别领域取得了显著的突破。本博客将介绍如何使用TensorFlow框架&#xff0c;结合LibriSpeech数据集&#xff0c;构建一个高效的语音识别系统。 目录 一、引言 二、环境准备 为了运行本示例代码&#xff0c;…

4核8G服务器能承受多少并发?

腾讯云4核8G服务器能承受多少并发&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#x…

0205-2-数据链路层

第 3 章 数据链路层 使用点对点信道的数据链路层 数据链路和帧 数据链路层使用的信道主要有以下两种类型&#xff1a; 点对点信道。这种信道使用一对一的点对点通信方式。广播信道。这种信道使用一对多的广播通信方式&#xff0c;因此过程比较复杂。广播信道上连接的主机很多…

力扣 第 124 场双周赛 解题报告 | 珂学家 | 非常规区间合并

前言 整体评价 T4的dp解法没想到&#xff0c;走了一条"不归路", 这个区间合并解很特殊&#xff0c;它是带状态的&#xff0c;而且最终的正解也是基于WA的case&#xff0c;慢慢理清的。 真心不容易&#xff0c;太难了。 T1. 相同分数的最大操作数目 I 思路: 模拟 c…

代码提交commit规范工具

一、idea工具 1.1安装 下载插件&#xff0c;以下是插件名 git commit message helper 安装后重启idea。 1.2使用 第一步&#xff1a; 根据代码提交的不同情况&#xff0c;选择不同的类型 feat表示&#xff1a;新增特性 fix表示&#xff1a;修复bug 等等。。。。 1.3效果…

HTTP请求报文与响应报文格式

HTTP请求报文与响应报文格式 HTTP请求报文与响应报文格式 请求报文包含四部分&#xff1a; a、请求行&#xff1a;包含请求方法、URI、HTTP版本信息b、请求首部字段c、请求内容实体d、空行 响应报文包含四部分&#xff1a; a、状态行&#xff1a;包含HTTP版本、状态码、状态码…

IO进程线程作业day1

1> 使用fgets统计给定文件的行数 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <unistd.h> int main(int argc, const char *argv[]) {//判断外部输入文件名是否规范if(argc!2){printf("in…

语义分割-基础知识

1.cls_iou计算: cls0_iou预测正确的像素个数/&#xff08;预测为该类别的像素个数真实标签为该类别的像素个数-预测正确的像素个数&#xff09; mean_iou各个类别的像素预测准确值相加/像素总个数2.转置卷积(Transposed Convolution) 转置卷积不是卷积的逆运算 转置卷积也是卷…