IO编程--单字符、字符串、格式化、模块化实现文件拷贝以及登录注册

news2024/10/17 9:31:48
一、完成标准io的单字符、字符串、格式化、模块化实现两个文件的拷贝
代码如下:

1.单字符

#include <myhead.h>
int main(int argc, const char *argv[])
{
    //打开文件
	FILE* fp=fopen("test.txt","r");	
	FILE* fq=fopen("copy_test.txt","w");
	if(fp==NULL||fq==NULL){
		perror("fopen error");
		return -1;
	}
	int ch;
    //循环将一个文件字符拷贝到另一个文件
	while(1){
		ch=fgetc(fp);
        //若文件指针指向文件末尾跳出循环
		if(feof(fp))
			break;
		fputc(ch,fq);
	}
	fclose(fp);
	fclose(fq);
	return 0;
}

2.字符串:

#include <myhead.h>
int main(int argc, const char *argv[])
{
	FILE* fp=fopen("test.txt","r");
	FILE* fq=fopen("copy_test.txt","w");
	if(fp==NULL||fq==NULL){
		perror("fopen error");
		return -1;
	}
    //定义字符数组存放从初始文件拷贝出来的字符串
	char str[20];
	while(1){
		fgets(str,sizeof(str),fp);
		if(feof(fp))
			break;
		fputs(str,fq);
	}
    //向文件写入拷贝成功的话 便于查看结果
	fprintf(fq,"字符串拷贝成功\n");
	fclose(fp);
	fclose(fq);
	return 0;
}

3.格式化:

#include <myhead.h>
int main(int argc, const char *argv[])
{
	FILE* fp=fopen("test.txt","r");
	FILE* fq=fopen("copy_test.txt","w");
	if(fp==NULL||fq==NULL){
		perror("fopen error");
		return -1;
	}
	char ch;
	while(1){
        //%c拷贝一切字符包括空格和回车 使文件原样输出
		fscanf(fp,"%c",&ch);
		if(feof(fp))
			break;
		fprintf(fq,"%c",ch);
	}
	fprintf(fq,"格式化拷贝成功\n");
	fclose(fp);
	fclose(fq);
	return 0;
}

4.模块化:

#include <myhead.h>
int main(int argc, const char *argv[])
{
	FILE* fp=fopen("test.txt","r");
	FILE* fq=fopen("copy_test.txt","w");
	if(fp==NULL||fq==NULL)
	{
		perror("fopen error");
		return -1;
	}
//可以使用单个字符单个字符的拷贝
/*	char str[50];
	while(!feof(fp)){
		int res=fread(str,sizeof(char),sizeof(str)-1,fp);
		str[res]='\0';
		fwrite(str,sizeof(char),res,fq);

	}*/
    //也可以使用每次拷贝字符串数组长度,多次拷贝文件
	while(1){
		char str[50]=" ";
		fread(str,sizeof(str),1,fp);
		fwrite(str,sizeof(str),1,fq);
		if(feof(fp))
			break;
	}
	fprintf(fq,"模块化拷贝成功\n");
	fclose(fp);
	fclose(fq);
	return 0;
}

运行结果如图所示:

单字符:

字符串:

格式化:

模块化:

二、实现注册和登录功能,将注册账号和密码存储到文件中,登录时遍历文件如果存在就登录成功否则登录失败 

代码如下:

#include <myhead.h>
//注册函数
int enroll_user(){
    //以只写形式打开文件
	FILE *fp=fopen("information.txt","a");
	//定义两个字符串数组存放账号、密码
    char username[20],password[20];
	printf("\t注册页面\n");
	printf("请输入帐号:");
    //从终端获取账号
	scanf("%s",username);
    //调用判断函数 确定返回值
	int n=panduan(username);
    //若账号和已存在的账号不重复
	if(n!=-1){
        //写入文件
		fprintf(fp,"%s",username);
		fprintf(fp," ");
		printf("请输入密码:");
		//从终端获取密码
        scanf("%s",password);
        //写入文件
		fprintf(fp,"%s",password);
		fprintf(fp,"\n");
		printf("注册成功\n");
		fclose(fp);
    //若重复 退出循环 输出语句
	}else{
		printf("用户名重复,请重新输入\n");
		fclose(fp);
	}
}
//判断从终端获取的账号是否和文件中的账号重复
int panduan(char username[20]){
	FILE *fp=fopen("information.txt","r");
    //定义字符串数组存放文件中的账号
	char f_username[20];
	while(1){
		fscanf(fp,"%s",f_username);
        //文件结束且不相等返回0
		if(feof(fp))
		{
			fclose(fp);
			return 0;
		}
        //判断字符串是否相等 相等返回-1
		if(strcmp(username,f_username)==0){
			return -1;
		}
	}
	fclose(fp);
	return 0;
}
//登录函数
int load_user(){
    //打开文件
	FILE *fp=fopen("information.txt","r");
	//定义字符串数存放从终端获取的账号、密码
    char username[20],password[20];
    //存放文件中的账号密码
	char file_username[20],file_password[20];
	printf("请输入帐号:");
    //从终端获取账号
	scanf("%s",username);
    //确保文件光标定位在开头
	fseek(fp,0,SEEK_SET);
	int n;
    //
	while(1){
		fscanf(fp,"%s",file_username);
		if(feof(fp)){
			printf("未查询到该用户,请重新输入\n");
			break;
		}
        //判断账号和文件账号是否相等
		n=strcmp(username,file_username);
        //如果不等 获取密码 目的是使光标移动 循环判断是否存在该用户
		if(n != 0){
			fscanf(fp,"%s",file_password);
        //如果相等 获取密码进行匹配判断
		}else{
			printf("用户名正确\n");
			printf("请输入密码:");
			scanf("%s",password);
			fscanf(fp,"%s",file_password);
				if(strcmp(password,file_password)==0){
					printf("登录成功\n");
					break;
				}else{
					printf("密码错误\n");
					break;
				}
		}
	}
}
int main(int argc, const char *argv[])
{
	/*实现注册和登录功能
	 将注册账号和密码存储到文件中,登录时遍历文件如果存在就登录成功否则登录失败*/	
	printf("\t欢迎进入网站!\n");
	int cz=0;
    //主函数实现结构登录注册页面
	while(1){
		printf("\t请选择注册或登录\n");
		printf("\t1、注册\n");
		printf("\t2、登录\n");
		printf("\t0、退出\n");
		scanf("%d",&cz);
        //循环调用注册和登录函数
		switch(cz){
			case 0:
				exit(0);
			case 1:
                //注册函数
				enroll_user();
				break;
			case 2:
                //登录函数
				load_user();
				break;
		}
	}
	return 0;
}

运行结果如图所示:

三、思维导图 

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

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

相关文章

leetcode:744. 寻找比目标字母大的最小字母(python3解法)

难度&#xff1a;简单 给你一个字符数组 letters&#xff0c;该数组按非递减顺序排序&#xff0c;以及一个字符 target。letters 里至少有两个不同的字符。 返回 letters 中大于 target 的最小的字符。如果不存在这样的字符&#xff0c;则返回 letters 的第一个字符。 示例 1&a…

2024国际潜水小姐大赛中国区总决赛盛典在广州举行,吉林选手张潇文获冠军!

传承“以美之名&#xff0c;保护海洋”的精神&#xff0c;2024年10月15日晚&#xff0c;2024国际潜水小姐大赛中国区总决赛盛典在广州渔民新村隆重举行&#xff01;来自全国多个城市&#xff0c;经过层层选拔产生的20位佳丽齐聚广州&#xff0c;以独特的女性水下之美和健康美&a…

初识算法 · 二分查找(1)

目录 前言&#xff1a; 二分查找 题目解析 算法原理 算法编写 搜索插入位置 题目解析 算法原理 算法编写 前言&#xff1a; 本文呢&#xff0c;我们从滑动窗口窗口算法移步到了二分查找算法&#xff0c;我们简单了解一下二分查找算法&#xff0c;二分查找算法是一个十…

安科瑞末端组合式智慧用电装置在高校宿舍中的应用

1相关背景 学校宿舍用电隐患 安全用电历来都是学校安全工作的一个重点&#xff0c;然而每年因此发生的人身伤害以及火灾事故却在继续&#xff0c;究其原因&#xff0c;主观上是我们的防患意识淡薄&#xff0c;客观上则是由于学生在宿舍使用违规电器、乱拉电线造成的。 现代的…

Java IO 基础知识

IO 流简介 IO 即 Input/Output&#xff0c;输入和输出。数据输入到计算机内存的过程即输入&#xff0c;反之输出到外部存储&#xff08;比如数据库&#xff0c;文件&#xff0c;远程主机&#xff09;的过程即输出。数据传输过程类似于水流&#xff0c;因此称为 IO 流。IO 流在…

java关于如何实现读取各种类型的文件核心属性方法,比如获取标题和作者、主题等;附带远程的https的地址文件读取方法;

有两种方法&#xff1a; 通过提供的现成api进行调用读取pdf文件&#xff0c;或doc、xlsx、pptx文件&#xff1b;可能商业需要付费 https://www.e-iceblue.cn/pdf_java_document_operation/set-pdf-document-properties-in-java.html Spire.PDF for Java import com.spire.pdf…

为什么SSH协议是安全的?

SSH的传输层协议&#xff08;Transport Layer Protocol&#xff09;和用户鉴权协议&#xff08;Authentication Protocol&#xff09;确保数据的传输安全&#xff0c;这里只介绍传输层协议&#xff0c;是SSH协议的基础。 本文针对SSH2协议。 1、客户端连接服务器 服务器默认…

基于springboot实习管理系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

k8s use-context是什么

kubectl 的 use-context 命令用于在 Kubernetes 集群中切换上下文&#xff08;context&#xff09;&#xff0c;从而方便地在多个集群或命名空间之间进行操作。一个上下文定义了 kubectl 使用的 集群、用户 和 命名空间 的组合。 use-context 的作用&#xff1a; 每个上下文&…

msql事务隔离级别 线上问题

1. 对应代码 解决方式&#xff1a; 在事务隔离级别为可重复读&#xff08;RR&#xff09;时&#xff0c;数据库确实通常会记录当前数据的快照。 在可重复读隔离级别下&#xff0c;事务在执行期间看到的数据是事务开始时的数据快照&#xff0c;即使其他事务对数据进行了修改&am…

考研前所学c语言02(2024/10/16)

1.一个十进制的数转化为二进制的就是不断除二取余&#xff0c;得到的余数从下到上取 比如123&#xff1a; 结果为&#xff1a; 同理其他的十进制转八进制&#xff0c;十六进制就除八&#xff0c;除十六即可 再比如123转十六进制&#xff1a; 因为余数是11&#xff0c;十六进…

超详细的finalshell安装数据库以及数据库的基本操作

一、下载 MySQL Enterprise Edition Downloads | Oraclehttps://www.oracle.com/mysql/technologies/mysql-enterprise-edition-downloads.html 这边有不同的版本&#xff0c;要看你的操作系统&#xff08;centos7 / centos8&#xff09;安装的是哪个版本 我把连接提取出来了&…

Vivado - Aurora 8B/10B IP

目录 1. 简介 2. 设计调试 2.1 Physical Layer 2.2 Link Layer 2.3 Receiver 2.4 IP 接口 2.5 调试过程 2.5.1 Block Design 2.5.2 释放 gt_reset 2.5.3 观察数据 3. 实用技巧 3.1 GT 坐标与布局 3.1.1 选择器件并进行RTL分析 3.1.2 进入平面设计 3.1.3 收发器布…

stm32 F4和F7的硬件CRC保持一致的设置

stm32F4系列的CRC没什么设置选项 逆向一下算法&#xff1a;http://www.ip33.com/crc.html 在stm32F7里面&#xff0c;CRC设置很丰富&#xff0c;如下设置可以和f4算出来的保持一致

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述&#xff1a; ①DHCP Snooping使能DHCP的一种安全特性&#xff0c;用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…

沐风老师3DMAX地形散布插件TerrainScatter使用方法详解

3DMAX地形散布插件TerrainScatter&#xff0c;根据画定的区域范围和地形起伏&#xff0c;一键种植树木、批量摆放建筑等&#xff0c;对于熟练3dmax的用户&#xff0c;也可以使用TerrainScatter插件制作屋顶摆放瓦片的效果。该插件工作方式是将源对象的副本放置到闭合曲线范围内…

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—大连理工大学专场!!!(暨全额奖学金政策)

香港科技大学广州&#xff5c;可持续能源与环境学域博士招生宣讲会—大连理工大学专场&#xff01;&#xff01;&#xff01;&#xff08;暨全额奖学金政策&#xff09; ⏰时间&#xff1a;2024年10月24日&#xff08;星期四&#xff09;16:00 &#x1f3e0;地点&#xff1a;…

【刷题册】2024.10.13 - 2024.10.15

目录 一、2024.10.131.1 BC153 [NOIP2010]数字统计1.2 NC313 两个数组的交集1.2.1 思路一&#xff1a;暴力O(N^2)1.2.2 思路二&#xff1a;hash 1.3 AB5 点击消除 二、2024.10.142.1 BC64⽜⽜的快递2.2 DP4 最⼩花费爬楼梯2.3 数组中两个字符串的最⼩距离 三、2024.10.153.1 BC…

操作系统实验一:Linux进程管理及其扩展

实验目的&#xff1a; 通过实验&#xff0c;加深理解进程控制块、进程队列等概念&#xff0c;了解进程管理的具体实施方法。 实验内容&#xff1a; 1. 阅读并分析Linux内核源代码&#xff0c;了解进程控制块、进程队列等数据结构&#xff1b; 2. 实现一个系统调用&#xff…

基于springboot留守儿童爱心网站

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…