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("input file error\n");printf("usage:./a.out filename\n");return -1;}//定义文件指针,以只读的形式打开传入的文件FILE *fp=NULL;if((fp=fopen(argv[1],"r"))==NULL){perror("fopen error");return -1;}//统计行号int count=0;//计数器char str[100];//获取文件的字符串的搬运工while(1){char *ptr=fgets(str,sizeof(str),fp);//从fp文件中读取字符串if(ptr==NULL){break;}count++;}printf("文件的行号为%d\n",count);fclose(fp);return 0;
}

 现象展示:

 2> 使用fputs和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!=3){printf("input file error\n");printf("usage:./a.out filename\n");return -1;}FILE *fp=NULL;//定义被获取文件内容的文件指针//以只读的形式打开文件fpif((fp=fopen(argv[1],"r"))==NULL){perror("fopen error");return -1;}FILE *fq=NULL;//定义被输入文件内容的文件指针//以只写的形式打开文件fqif((fq=fopen(argv[2],"w"))==NULL){perror("fopen error");return -1;}	char str[4];//获取文件的字符串的搬运工,每四个字符为一组截取while(1){char *ptr=fgets(str,sizeof(str),fp);//从fp文件中读取字符串if(ptr==NULL){break;}fputs(ptr,fq);}fclose(fp);fclose(fq);//以只读的形式打开文件fqif((fq=fopen(argv[2],"r"))==NULL){perror("fopen error");return -1;}	while(1){char *ptr = fgets(str, sizeof(str), fq);   //从fq文件中读取字符串到buf中if(ptr == NULL){break;}printf("str=%s\n", str);}fclose(fq);return 0;
}

现象展示:

 

3> 完成注册登录功能

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

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
#define Size 50
void register_user();
void login_user();
int main(int argc, const char *argv[])
{int number=0;FILE *fp = NULL;while(1){printf("\t\t======XXX登录界面============\n");printf("\t\t======1、注册============\n");printf("\t\t======2、登录============\n");printf("\t\t======0、退出============\n");printf("请输入选项:");scanf("%d", &number);getchar();//对菜单多分支选择switch(number){case 1:{//注册功能register_user();  	}break;case 2:{//登录功能login_user();  	}break;case 0:{goto END;}default:printf("您输入的功能有误,请重新输入\n");break;}}
END:return 0;
}
void register_user() 
{  char username[Size];  char password[Size];    printf("\n注册新用户:\n");  printf("请输入账户名:");  scanf("%s", username);   printf("请输入密码:");  scanf("%s", password);  FILE *file = fopen("./user.txt", "a");  if (file == NULL) {  perror("打开文件失败");  return;  }    fprintf(file, "%s,%s\n", username, password);  fclose(file);  printf("注册成功!\n");  
}
void login_user() 
{char username[Size];char password[Size];char file_username[Size];char file_password[Size];printf("\n登录:\n");printf("请输入账户名:");scanf("%s", username); printf("请输入密码:");scanf("%s", password); FILE *file = fopen("./user.txt", "r");if (file == NULL) {perror("打开文件失败");return;}int found = 0;while (fscanf(file, "%[^,],%s\n", file_username, file_password) != EOF) {printf("%s  %s",file_username,file_password);if (strcmp(username, file_username) == 0 && strcmp(password, file_password) == 0) {found = 1;break;}}fclose(file);if (found) {printf("登录成功!\n");} else {printf("登录失败,账户或密码错误。\n");}
}

现象展示:

思维导图

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

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

相关文章

语义分割-基础知识

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

通过写代码学习AWS DynamoDB (3)- 一致性hash

简介 在本文中&#xff0c;我们将简单介绍一致性hash&#xff08;consistent hash&#xff09;的概念&#xff0c;以及一致性hash可以解决的问题。然后我们将在模拟的DDB实现中实现一个简单版本的基于一致性harsh实现的partition。 问题 在《通过写代码学习AWS DynamoDB &am…

2024免费人像摄影后期处理工具Portraiture4.1

Portraiture作为一款智能磨皮插件&#xff0c;确实为Photoshop和Lightroom用户带来了极大的便利。通过其先进的人工智能算法&#xff0c;它能够自动识别并处理照片中的人物皮肤、头发和眉毛等部位&#xff0c;实现一键式的磨皮美化效果&#xff0c;极大地简化了后期处理的过程。…

三防平板和普通平板的区别?

①、三防平板和普通平板的主要区别在于其具有更强的耐久性和防护性能。"三防" 是指防水、防尘和防摔&#xff0c;这意味着三防平板能够在恶劣的环境中使用&#xff0c;例如户外、工厂和野外等地方。 三防平板和普通平板的一些区别主要有以下几点&#xff1a; 防水性…

2024年重磅消息:来自OpenAI发布的视频生成模型Sora

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

huggingface库LocalTokenNotFoundError:需要提供token

今天刚开始学习huggingface&#xff0c;跑示例的时候出了不少错&#xff0c;在此记录一下&#xff1a; (gpu) F:\transformer\transformers\examples\pytorch\image-classification>.\run.bat Traceback (most recent call last):File "F:\transformer\transformers\e…

使用RegNet替换YOLOX中原始的Backbone

使用mmdetection 中的RegNet bcakbones替换YOLOX中原始的Backbone 将mmdet/models/backbones/regnet.py中相关的代码复制到YOLOX中&#xff0c;并进行适配 注意通道数要适配 in_channels [64, 160, 384] &#xff0c;可以通过调试后&#xff0c;先运行到后后端输出结果出&a…

删除链表的倒数第N个节点

删除链表的倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 进阶&#xff1a;你能尝试使用一趟扫描实现吗&#xff1f; 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例…

社科院与杜兰大学金融管理硕士——跑赢过去的自己,用热情与毅力点燃生活的火焰

在这场人生的马拉松中&#xff0c;我们每个人都是跑者&#xff0c;背负着梦想与希望&#xff0c;不断挑战自我&#xff0c;超越过去的自己。我们追求的不仅仅是速度&#xff0c;更是那份持之以恒的毅力与智慧。而社科院与杜兰大学金融管理硕士项目&#xff0c;正是为那些渴望在…

鸿蒙新手入门-环境准备问题解析

Node.js版本与API配套关系 由于SDK的部分工具依赖Node.js运行时&#xff0c;推荐使用配套API版本的Node.js&#xff0c;保证工程的兼容性。 匹配关系见下表&#xff1a; API LevelNode.js支持范围API Level≤914.x&#xff08;≥14.19.1&#xff09;、16.xAPI Level>914.…

【MySQL进阶之路】MySQL中的聚簇索引和非聚簇索引、以及回表查询

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

电脑屏幕录制工具 Top10 榜单,免费无水印方法集

随着媒体行业的突飞猛进&#xff0c;不同服务之间对有效屏幕录制的竞争日益激烈。这导致市场上出现了质量参差不齐的屏幕录像机。特别是有些录屏器会自动给你录制的视频加上水印&#xff0c;给需要在公共场合使用的人留下不专业的印象。除此之外&#xff0c;它们甚至不能保护您…