IO进程线程作业day1

news2025/1/21 7:17:44

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;//定义被获取文件内容的文件指针
	//以只读的形式打开文件fp
	if((fp=fopen(argv[1],"r"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	FILE *fq=NULL;//定义被输入文件内容的文件指针
	//以只写的形式打开文件fq
	if((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);
	//以只读的形式打开文件fq
	if((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.coloradmin.cn/o/1455016.html

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

相关文章

K8S之运用污点、容忍度设置Pod的调度约束

污点、容忍度 污点容忍度 taints 是键值数据&#xff0c;用在节点上&#xff0c;定义污点&#xff1b; tolerations 是键值数据&#xff0c;用在pod上&#xff0c;定义容忍度&#xff0c;能容忍哪些污点。 污点 污点是定义在k8s集群的节点上的键值属性数据&#xff0c;可以决…

ARMv8-AArch64 的异常处理模型详解之异常处理详解(进入异常以及异常路由)

在上篇文章 ARMv8-AArch64 的异常处理模型详解之异常处理概述Handling exceptions中&#xff0c;作者对异常处理整体流程以及相关概念做了梳理。接下来&#xff0c;本文将详细介绍处理器在获取异常、异常处理以及异常返回等过程中都做了哪些工作。 ARMv8-AArch64 的异常处理模型…

批量追踪中通快递

在物流信息的管理中&#xff0c;批量追踪中通快递单号一直是个让人头疼的问题。但有了固乔快递查询助手&#xff0c;这一切都变得轻而易举。 固乔快递查询助手&#xff0c;作为市场上备受好评的快递查询软件&#xff0c;专门针对批量查询需求进行了优化。用户只需将中通快递单号…

鸿蒙生态来了 ,60k 高薪向你招手

最近&#xff0c;各大平台都被华为鸿蒙不断刷屏。原因是在华为秋季发布会上&#xff0c;华为宣布启动鸿蒙原生应用&#xff0c;不再兼容安卓应用。一石激起千层浪&#xff0c;这无疑是IT界的一颗核弹&#xff0c;各大企业和开发者都纷纷开始加入“鸿蒙朋友圈”。 鸿蒙原生应用…

数据分析 — Matplotlib 、Pandas、Seaborn 绘图

目录 一、Matplotlib1、折线图2、柱状图3、水平条形图4、直方图5、散点图6、饼图 二、pandas1、折线图2、柱状图 三、seaborn1、散点图2、箱线图3、直方核密度图4、成对图 一、Matplotlib Matplotlib 是一个用于绘制数据可视化图形的 Python 库。它提供了丰富的绘图工具&#…

Eliminating Domain Bias for Federated Learning in Representation Space【文笔可参考】

文章及作者信息&#xff1a; NIPS2023 Jianqing Zhang 上海交通大学 之前中的NeurIPS23论文刚今天传到arxiv上&#xff0c;这次我把federated learning的每一轮看成是一次bi-directional knowledge transfer过程&#xff0c;提出了一种促进server和client之间bi-direction…

浅析Linux设备驱动:IO端口和IO内存

文章目录 概述IO端口和IO内存的区别 IO资源管理IO资源类型IO端口资源IO内存资源 IO资源分配 IO端口访问IO端口操作函数 IO内存访问IO内存操作函数 相关参考 概述 在计算机系统中&#xff0c;外部设备通常会提供一组寄存器或内存用于处理器配置和访问设备功能。这些寄存器或内存…

MCU电源控制(PWR)与低功耗

目录 一、STM32 的内核和外设电源系统管理&#xff1a; 二、MCU电源监控&#xff1a; 三、三种低功耗模式&#xff1a; 1、睡眠模式&#xff1a; 2、停止模式&#xff1a; 3、待机模式&#xff1a; 一、STM32 的内核和外设电源系统管理&#xff1a; ① 电池备份区域&#…

思迈特再获国家权威认证:代码自主率98.78%

日前&#xff0c;思迈特软件自主研发的商业智能与数据分析软件&#xff08;Smartbi Insight&#xff09;通过中国赛宝实验室&#xff08;工业和信息化部电子第五研究所&#xff09;代码扫描测试&#xff0c;Smartbi Insight V11版本扫描测得代码自主率为98.78%的好成绩&#xf…

原创详解OpenAI Sora是什么?技术先进在哪里?能够带来什么影响?附中英文技术文档

一&#xff1a;Sora是什么 Sora是一个文本到视频的模型&#xff0c;由美国的人工智能研究机构OpenAI开发。Sora可以根据描述性的文本提示&#xff0c;生成高质量的视频&#xff0c;也可以根据已有的视频&#xff0c;向前或向后延伸&#xff0c;生成更长的视频。 Sora的主要功…

【完全二叉树节点数!】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数

【完全二叉树】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数 :star:解法1 按照完全二叉树解法2 按照普通二叉树&#xff1a;深度优先遍历 后序 左右中解法3 按照普通二叉树&#xff1a;广度优先遍历 层序遍历 ---------------&#x1f388;&#x1f388;题目链接…

【漏洞复现-通达OA】通达OA swfupload_new存在前台SQL注入漏洞

一、漏洞简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。通达OA为各行业不同规模的众多用户提供信息化管理能力,包括流程审批、行政办公、日常事务、数据统计…

~汉诺塔~(C语言)~

引言 汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从上面开始按大小顺序重新摆放在…

[计算机网络]深度学习传输层TCP协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录专栏&#xff1a;深度学习传输层TCP协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 [计算机网络]深度学习传输层TCP协议 前提概括一: TCP协议段格式二:确认应答三:超时重传四:…

IgG1 (mouse), ELISA kit——ENZO热销产品

90分钟内可得结果的高特异性定量ELISA试剂盒 免疫球蛋白G&#xff08;IgG&#xff09;是一种免疫球蛋白单体&#xff0c;由两条&#xff08;γ&#xff09;重链和两条轻链组成。每个IgG分子包含两个抗原结合域和一个效应&#xff08;Fc&#xff09;域。Enzo Life Sciences可提供…

【hcie-cloud】【29】华为云Stack数据安全服务

文章目录 前言数据安全概述数据产业发展和敏感数据上云趋势下对数据安全的需求重大隐私数据泄露事件云端数据安全问题成为业务上云的主要障碍数据安全相关法律法规密集出台数据安全法 - 欧盟的GDPR中国的数据安全法端到端考虑数据安全数据安全生命周期华为云Stack全生命周期数据…

七、Mybatis缓存

缓存就是内存中的数据&#xff0c;常常来自对数据库查询结果的保存&#xff0c;使用缓存、可以避免频繁的与数据库进行交互&#xff0c;进而提高响应速度一级缓存是sqlSession级别的缓存&#xff0c;在操作数据库时需要构造sqlsession对象&#xff0c;在对象中有一个数据结构&a…

WEB APIs(2)

应用定时器可以写一个定时轮播图&#xff0c;如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&qu…

React 更改程序入口点(index.js文件位置变更)

食用前提示&#xff1a;本文基于已经快速配置好的React环境而作&#xff0c;配置React环境详见拙作&#xff1a;React环境配置-CSDN博客~ 一、了解默认入口点 使用create-react-app快速搭建react环境后&#xff0c;npm start启动程序的默认入口点为/src/index(即src目录下的ind…

《白话C++》第10章 STL和boost,Page70~72 boost::scoped_ptr

《泛型》篇中提到的某个IT项目的辩论会&#xff0c; 一派坚持智能指针和裸指针可以“离婚”&#xff0c;它们是std::auto_ptr的支持者&#xff0c; 一派认为智能指针和裸指针不可以“离婚”&#xff0c;boost::scoped_ptr体现了他们的观点&#xff1a; boost::scoped_ptr基本…