32、IO/对文件读写操作相关练习20240218

一、使用fgets统计给定文件的行数

代码:

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

int main(int argc, const char *argv[])
{
	FILE *fp=NULL;
	if((fp=fopen("./1.txt","r"))==NULL)//只读形式打开1.txt文件
	{
		perror("fopen error");
		return -1;
	}
	char str[32]="";//定义字符数组用于存储文件内每一行字符
	int line=0;//记录行数
	while(1)
	{
		char *p=fgets(str,sizeof(str),fp);//循环获取文件内每一行字符,并存入str
		if(NULL==p)//如果返回NULL 则结束循环;
			break;
		printf("%s\n",str);
		int i=strlen(str)-1;//计算每次获取的字符串中 \0前一个字符的下标;
		if(str[i]=='\n')//如果对应下标的元素是\n 行数+1;
			line++;
	}
	printf("1.txt line=%d\n",line);//循环结束输出行数;
	return 0;
}

运行:

二、 使用fputs和fgets完成两个文件的拷贝。

代码:

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

int main(int argc, const char *argv[])
{
	FILE *srcfp=NULL; //定义两个文件指针;
	FILE *destfp=NULL; 
    //只读形式打开1.txt;只写模式打开2.txt
	if((srcfp=fopen("./1.txt","r"))==NULL || (destfp=fopen("./2.txt","w"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	char str[32]="";//存储每次赋值的一行字符串;
	while(1)
	{		
		char *p=fgets(str,sizeof(str),srcfp);//将1.txt中每行字符存入str;
		if(p==NULL)//如果返回NULL;则结束循环
		{
			break;
		}
		fputs(str,destfp);//将每行获取的字符输入到文件2.txt中;
	}
	return 0;
}

运行:

三、完成注册登录功能

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

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

代码:

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

int main(int argc, const char *argv[])
{
	int menu=0;
	FILE *fp=NULL;
	char str[32]="";
	while(1)
	{
		system("clear");//执行终端指令
		printf("\t\t-----登录系统------\n");
		printf("\t\t------1.注册-------\n");
		printf("\t\t------2.登录-------\n");
		printf("\t\t------3.退出-------\n");
		printf("pelese enter option:");
		scanf("%d",&menu);
		getchar();

		//对menu进行多分支选择
		switch(menu)
		{
		case 1:
			{
				if((fp=fopen("./3.txt","a"))==NULL)
				{
					perror("fopen eerror");
					return -1;
				}
				printf("请设置注册账号:");
				scanf(" %s",str);
				fprintf(fp,"%s\n",str);//加换行存入
				printf("请设置注册密码:");
				scanf(" %s",str);
				fprintf(fp,"%s\n",str);
				fclose(fp);
			}break;
		case 2:
			{
				if((fp=fopen("./3.txt","r"))==NULL)
				{
					perror("fopen eerror");
					return -1;
				}
				char input_str[16]="";
AGAINID:
				printf("请输入账号:");
				scanf(" %s",input_str);
				int flag=0;
				while(1)
				{
					char *p=fgets(str,sizeof(str),fp);
					if(NULL==p)
						break;
					str[strlen(str)-1]='\0';//结尾添加\0作为字符串标志
					int sub=strcmp(str,input_str); //比较两个字符串
					if(!sub)
					{
						flag++;
						printf("账号存在\n");
						break;
					}
				}

				if(0==flag)
				{
					printf("输入的账号不存在\n");
					goto 	AGAINID;
				}
AGAINPW:
				printf("请输入密码:");
				char input_pw[16]="";
				scanf(" %s",input_pw);	
				while(1)
				{
					char *p=fgets(str,sizeof(str),fp);
					if(NULL==p)
						break;
					str[strlen(str)-1]='\0';
					int sub=strcmp(str,input_pw);
					if(!sub)
					{
						flag++;
						printf("登陆成功\n");
						break;
					}
				}
				if(0==flag)
				{
					printf("输入的密码不正确\n");
					goto 	AGAINPW;
				}
				fclose(fp);
			}break;
		case 3:goto END;
		default:
			   printf("选择的功能有误,请重新输入\n");
		}
		printf("请输入任意按键回车结束\n");
		while(getchar()!='\n');
	}
END:
	return 0;
}

运行结果:

 

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

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

相关文章

【算法学习】简单多状态-动态规划

前言 本篇博客记录动态规划中的简单多状态问题。 在之前的动态规划类型的题中&#xff0c;我们每次分析的都只是一种或者某一类的状态&#xff0c;定义的dp表也是围绕着一种状态来的。 现在可能对于一种状态&#xff0c;存在几种不同的子状态&#xff0c;在状态转移过程中相互影…

面试经验分享 | 通关某公司面试靶场

本文由掌控安全学院 - 冰封小天堂 投稿 0x00:探测IP 首先打开时候长这个样&#xff0c;一开始感觉是迷惑行为&#xff0c;试了试/admin&#xff0c;/login这些发现都没有 随后F12查看网络&#xff0c;看到几个js文件带有传参&#xff0c;就丢sqlmap跑了一下无果 随后也反查了…

网络模型及传输基本流程

1.OSI 七层模型 OSI &#xff08; Open System Interconnection &#xff0c;开放系统互连&#xff09;七层网络模型称为开放式系统互联参考模型&#xff0c;是一个逻辑上的定义和规范; 把网络从逻辑上分为了 7 层 . 每一层都有相关、相对应的物理设备&#xff0c;比如路由器…

【C语言】Debian安装并编译内核源码

在Debian 10中安装并编译内核源码的过程如下&#xff1a; 1. 安装依赖包 首先需要确保有足够的权限来安装包。为了编译内核&#xff0c;需要有一些基础的工具和库。 sudo apt update sudo apt upgrade sudo apt install build-essential libncurses-dev bison flex libssl-d…

【分享】windows11 vmware centos7 搭建k8s完整实验

概述 开年第一天&#xff0c;补充下自己的技术栈。 参考文章: k8s安装 - 知乎 【Kubernetes部署篇】K8s图形化管理工具Dasboard部署及使用_k8s可视化管理工具-CSDN博客 centos7环境下安装k8s 1.18.0版本带dashboard界面全记录&#xff08;纯命令版&#xff09;_sysconfig1.…

Keras可以使用的现有模型

官网&#xff1a;https://keras.io/api/applications/ 一些使用的列子&#xff1a; ResNet50&#xff1a;分类预测 import keras from keras.applications.resnet50 import ResNet50 from keras.applications.resnet50 import preprocess_input, decode_predictions import nu…

基于scrapy框架的单机爬虫与分布式爬虫

我们知道&#xff0c;对于scrapy框架来说&#xff0c;不仅可以单机构建复杂的爬虫项目&#xff0c;还可以通过简单的修改&#xff0c;将单机版爬虫改为分布式的&#xff0c;大大提高爬取效率。下面我就以一个简单的爬虫案例&#xff0c;介绍一下如何构建一个单机版的爬虫&#…

修改vue-layer中title

左侧目录树点击时同步目录树名称 试了很多方法 layer.title(新标题&#xff0c;index)不知道为啥不行 最后用了获取html树来修改了 watch: {$store.state.nowTreePath: function(newVal, oldVal) {if (document.querySelectorAll(".lv-title") && document.q…

AD高速板常见问题和过流自锁

可以使用电机减速器来增大电机的扭矩&#xff0c;低速运行的步进电机更要加上减速机 减速电机就是普通电机加上了减速箱&#xff0c;这样便降低了转速增大了扭矩 HDMI布线要求&#xff1a; 如要蛇形使其等长&#xff0c;不要在HDMI的一端绕线。 HDMI走线时两边拉线&#xff0…

见智未来:数据可视化引领智慧城市之潮

在数字时代的浪潮中&#xff0c;数据可视化崭露头角&#xff0c;为打造智慧城市注入了强大的活力。不再被深奥的数据所束缚&#xff0c;我们通过数据可视化这一工具&#xff0c;可以更加接近智慧城市的未来。下面我就以可视化从业者的角度来简单聊聊这个话题。 数据可视化首先为…

wps快速生成目录及页码设置(自备)

目录 第一步目录整理 标题格式设置 插入页码&#xff08;罗马和数字&#xff09; 目录生成&#xff08;从罗马尾页开始&#xff09; ​编辑目录格式修改 第一步目录整理 1罗马标题 2罗马标题1一级标题 1.1 二级标题 1.2二级标题2一级标题 2.1 二级标题 2.2二级标题3一级标…

HTML5+CSS3+JS小实例:锥形渐变彩虹按钮

实例:锥形渐变彩虹按钮 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /…

【ansible】认识ansible,了解常用的模块

目录 一、ansible是什么&#xff1f; 二、ansible的特点&#xff1f; 三、ansible与其他运维工具的对比 四、ansible的环境部署 第一步&#xff1a;配置主机清单 第二步&#xff1a;完成密钥对免密登录 五、ansible基于命令行完成常用的模块学习 模块1&#xff1a;comma…

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…

6.s081 学习实验记录(七)Multithreading

文章目录 一、Uthread: switching between threads简介提示实验代码实验结果 二、Using threads简介实验代码 三、Barrier简介实验代码实验结果 一、Uthread: switching between threads 简介 切换到 thread 分支 git fetchgit checkout threadmake clean 实现用户态线程的…

SHOT特征描述符、对应关系可视化以及ICP配准

一、SHOT特征描述符可视化 C #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/search/kdtree.h> #include <pcl/io/pcd_io.h> #include <pcl/features/normal_3d_omp.h>//使用OMP需要添加的头文件 #include <boo…

考完PMP如何让学习价值最大化?考PRINCE2!

01什么是PRINCE2 PRINCE2的全称是Project IN Controlled Environment。也就是受控环境下的项目管理&#xff0c;国际项目管理师认证&#xff0c;在国际上被称为王者认证。PRINCE2描述了如何以一种逻辑性的、有组织的方法&#xff0c;按照明确的步骤对项目进行管理。 95%以上全…

软件实例分享,酒店酒水寄存管理系统软件教程

软件实例分享&#xff0c;酒店酒水寄存管理系统软件教程 一、前言 以下软件教程以 佳易王酒水寄存管理系统软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、寄存的商品名称可以预先设置 2、寄存人可以使用手.机号识别 3、会员充值…

C#,计算几何,贝塞耳插值(Bessel‘s interpolation)的算法与源代码

Friedrich Wilhelm Bessel 1 贝塞耳插值&#xff08;Bessels interpolation&#xff09; 首先要区别于另外一个读音接近的插值算法&#xff1a;贝塞尔插值&#xff08;Bzier&#xff09;。 &#xff08;1&#xff09;读音接近&#xff0c;但不是一个人&#xff1b; &#x…

嵌入式调试工具之GDB

在单片机开发中&#xff0c;我们可以通过集成式的IDE 来进行调试&#xff0c;比如 MDK、IAR 等。 GDB 工具是 GNU 项目调试器&#xff0c;基于命令行使用。和其他的调试器一样&#xff0c;可使用 GDB工具单步运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等&#…