第一章:标准IO

作业:

1、使用这fscanf和fprintf两个函数实现文件的拷贝。

cpp 复制代码
/*******************************************************/
//=> File Name: spcopy.c
//=> Author: Water
//=> Mail: [email protected] 
//=> Created Time: 2024年12月09日 星期一 19时26分15秒
/*******************************************************/

#include<myhead.h>
int main(int argc, const char *argv[])
{
	int res = 0;
	FILE * fp1 = fopen("./spcopy.c","r");
	FILE * fp2 = fopen("./test.txt","w");
	char key;
	while(1)
	{
		if(res == EOF)
		{
			break;
		}
		res = fscanf(fp1,"%c",&key);
		fprintf(fp2,"%c",key);
	}
	fclose(fp1);
	fclose(fp2);
	fp2 = fopen("./test.txt","r");
	while(1)
	{
		res = fscanf(fp2,"%c",&key);
		if(res == EOF)
		{
			break;
		}
		printf("%c",key);
	}
	fclose(fp2);
	return 0;
}


2、fwrite和fread实现文件拷贝。

cpp 复制代码
/*******************************************************/
//=> File Name: rwcopy.c
//=> Author: Water
//=> Mail: [email protected] 
//=> Created Time: 2024年12月09日 星期一 16时33分24秒
/*******************************************************/

#include<myhead.h>
int main(int argc, const char *argv[])
{
	FILE * fp1 = fopen("./rwcopy.c","r");
	FILE * fp2 = fopen("./test.txt","w");
	char buff[1024] = "";
	while(1)
	{
		int res = fread(buff,1,sizeof(buff),fp1);
		if(res == 0)
		{
			break;
		}
		fwrite(buff,sizeof(buff),1,fp2);
	}
	fclose(fp1);
	fclose(fp2);
	fp2 = fopen("./test.txt","r");
	while(1)
	{
		int res = fread(buff,1,sizeof(buff),fp2);
		if(res == 0)
		{
			break;
		}
		printf("%s",buff);
	}
	fclose(fp2);
	return 0;
}


3、登录注册实现一遍。

cpp 复制代码
/*******************************************************/
//=> File Name: zhucedenglupro.h
//=> Author: Water
//=> Mail: [email protected] 
//=> Created Time: 2024年12月09日 星期一 13时45分37秒
/*******************************************************/

#ifndef ZHUCEDENGLUPRO_H
#define ZHUCEDENGLUPRO_H
#include<myhead.h>

//共用函数声明
void dengdai();			//等待键入回车再返回到主菜单
void error1();			//误输入提示模块
//注册登录模块相关函数声明
int getch();  			//按键读取函数
void mima();			//密码隐藏函数
void zhucedenglu(); 	//注册登录框架
void menu1(); 			//注册登录循环显示选择模块
void zhuce(); 			//注册模块
void denglu(); 			//登录模块
cpp 复制代码
/*******************************************************/
//=> File Name: zhucedenglupro.c
//=> Author: Water
//=> Mail: [email protected] 
//=> Created Time: 2024年12月09日 星期一 13时45分37秒
/*******************************************************/

#include"zhucedenglupro.h"
//注册登录系统
void zhucedenglu()							
{
	char regest_usr[20] = ""; 						//注册名称
	char regest_pwd[20] = ""; 						//注册密码
	while(1)
	{	
		int select1 = 0; 							//菜单1的选项
		menu1(&select1); 							//注册登录循环显示选择模块
		switch(select1) 							//多分支选择
		{
		case 1: 								//注册账号
			{
				zhuce(&regest_usr,&regest_pwd); 	//调用注册模块
			}
			break;
		case 2: 		 						//登录账号
			{
				denglu(&regest_usr,&regest_pwd); 	//调用登录模块
				return;
			}
			break;
		case 0:
			exit(0);
		default:
			error1();							//误输入提示模块
			dengdai(); 							//等待键入回车再返回到主菜单
		}
	}
}
//注册登录循环显示选择模块
void menu1(int * select1) 								
{
	system("clear"); 								//清屏
	printf("=====注册账号=====\n");
	printf("===1、注册账号====\n");
	printf("===2、登录账号====\n");
	printf("===0、退出系统====\n");
	printf("请键入选项(0~2):");
	scanf("%d",select1);
}
//按键读取函数
int getch() 				
{
    int c = 0;
    struct termios org_opts, new_opts;
    int res = 0;
    res = tcgetattr(STDIN_FILENO, &org_opts);
    assert(res == 0);
 
    new_opts = org_opts;
 
    new_opts.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
 
    c = getchar();
 
    res = tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
    assert(res == 0);
    return c;
}
//密码隐藏函数
void mima(char * pass)
{
	int i = 0;
	while((getchar()) != '\n'); 					//清空缓冲区
	while(1)
	{
		char c=getch();
		if(c=='\n'){break;}
		printf("*");
		pass[i++]=c;
	}
}
//注册模块
void zhuce(char * regest_usr,char * regest_pwd) 					
{
	printf("请输入账号:");
	scanf("%s",regest_usr);
	printf("请输入密码:");
	mima(regest_pwd);
	//追加写的方式写入文件
	FILE * fp = fopen("./.zhangmiFile","a+"); 		//打开隐藏文件
	if(NULL == fp)
	{
		perror("fopen");
		return;
	}
	fprintf(fp,"%s %s\n",regest_usr,regest_pwd);
	fclose(fp);
	printf("\n注册成功,请键入回车返回主菜单\n");
	getchar(); 									//等待键入回车再返回到主菜单
}
//登录模块
void denglu(char * regest_usr,char * regest_pwd) 					
{
	while(1)
	{
		char usrName[20] = ""; 						//登录账号
		char pwd[20] = "";							//登录密码
		printf("请输入账号:");
		scanf("%s",usrName);
		printf("请输入密码:");
		mima(pwd);
		//循环读取文件内容与账号密码匹配
		FILE * fp = fopen("./.zhangmiFile","r");
		if(NULL == fp)
		{
			perror("fopen");
			return;
		}
		while(1)
		{
			int res = fscanf(fp,"%s %s",regest_usr,regest_pwd);
			if(res == EOF)
			{
				break;
			}
			//判断登录是否成功
			if(strcmp(usrName,regest_usr) == 0 && strcmp(pwd,regest_pwd) == 0)
			{
				printf("\n登录成功,请键入回车进入下一级界面\n");
				getchar(); 						//等待键入回车再返回到主菜单
				printf("下一级界面\n"); 			//进入下一级界面
				return;
			}
		}
		printf("\n登录失败,请重新登录\n");
	}
}
//等待键入回车再返回到主菜单
void dengdai()  							
{
		while((getchar()) != '\n'); 				//清空缓冲区
		getchar(); 								//等待键入回车再返回到主菜单
}
void error1()										//误输入提示模块
{
	printf("输入有误,请键入回车返回主菜单\n");
}
cpp 复制代码
/*******************************************************/
//=> File Name: main.c
//=> Author: Water
//=> Mail: [email protected] 
//=> Created Time: 2024年12月09日 星期一 13时45分37秒
/*******************************************************/

#include"zhucedenglupro.h"
int main(int argc, const char *argv[])
{
	zhucedenglu(); 		//注册登录系统
	return 0;
}
相关推荐
invincible_Tang14 分钟前
R格式 (15届B) 高精度
开发语言·算法·r语言
TDD_06281 小时前
【运维】Centos硬盘满导致开机时处于加载状态无法开机解决办法
linux·运维·经验分享·centos
独好紫罗兰1 小时前
洛谷题单2-P5715 【深基3.例8】三位数排序-python-流程图重构
开发语言·python·算法
x66ccff1 小时前
vLLM 启动 GGUF 模型踩坑记:从报错到 100% GPU 占用的原因解析
linux
序属秋秋秋1 小时前
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
c语言·c++·学习·算法
William.csj1 小时前
Linux——开发板显示器显示不出来,vscode远程登录不进去,内存满了的解决办法
linux·vscode
玉树临风ives1 小时前
leetcode 2360 图中最长的环 题解
算法·leetcode·深度优先·图论
想睡hhh2 小时前
c语言数据结构——八大排序算法实现
c语言·数据结构·排序算法
KeithTsui2 小时前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
森叶2 小时前
linux如何与windows进行共享文件夹开发,不用来回用git进行拉来拉去,这个对于swoole开发者来说特别重要
linux·git·swoole