您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页标准IO输入输出

标准IO输入输出

来源:纷纭教育

1、完成标准io的单字符、字符串、格式化、模块化实现两个文件的拷贝;

//单字符拷贝
#include <myhead.h>
int main(int argc, const char *argv[])
{
	//判断是否有3个文件传入
	if(3 != argc){
		fputs("input file error:",stderr);
		return -1;
	}

	//判断源文件是否打开成功
	FILE * sfp = fopen(argv[1],"r");
	if(sfp == 0){
		perror("fopen sfp error");
		return -1;
	}

	//判断目标文件是否打开成功
	FILE * dfp = fopen(argv[2],"w");
	if(dfp == 0){
		perror("fopen dsp error");
		return -1;
	}

	//拷贝
	while(1){
	
			printf("%d\n", ftell(sfp));
		int res = fgetc(sfp);
		if(feof(sfp))
		{
			printf("%d\n", ftell(sfp));
			break;
		}
	//	if(res == EOF){
	//	break;
	//	}
		fputc(res,dfp);
	}

	//关闭源文件、目标文件
	fclose(sfp);
	fclose(dfp);
	return 0;
}
//字符串拷贝
#include <myhead.h>
int main(int argc, const char *argv[])
{
	//判断是否有3个文件传入
	if(3 != argc){
		fputs("input file error:",stderr);
		return -1;
	}

	//判断源文件是否打开成功
	FILE * sfp = fopen(argv[1],"r");
	if(sfp == 0){
		perror("fopen sfp error");
		return -1;
	}

	//判断目标文件是否打开成功
	FILE * dfp = fopen(argv[2],"w");
	if(dfp == 0){
		perror("fopen dsp error");
		return -1;
	}

	//拷贝
	char tg[10] = "";
	while(1){
		char * res = fgets(tg,sizeof(tg),sfp);
		if( res == 0 ){
			break;
		}
		fputs(tg,dfp);
	}

	//关闭源文件、目标文件
	fclose(sfp);
	fclose(dfp);
	return 0;
}
//格式符拷贝
#include <myhead.h>
int main(int argc, const char *argv[])
{
	//判断是否有3个文件传入
	if(3 != argc){
		fputs("input file error:",stderr);
		return -1;
	}

	//判断源文件是否打开成功
	FILE * sfp = fopen(argv[1],"r");
	if(sfp == 0){
		perror("fopen sfp error");
		return -1;
	}

	//判断目标文件是否打开成功
	FILE * dfp = fopen(argv[2],"w");
	if(dfp == 0){
		perror("fopen dsp error");
		return -1;
	}

	//拷贝
	char tg;
	while(1){
		int res = fscanf(sfp,"%c",&tg);
		if(res == EOF){
			break;
		}
		fprintf(dfp,"%c",tg);
	}

	//关闭源文件、目标文件
	fclose(sfp);
	fclose(dfp);
	return 0;
}
//模块化拷贝
#include <myhead.h>
int main(int argc, const char *argv[])
{
	//判断是否有3个文件传入
	if(3 != argc){
		fputs("input file error:",stderr);
		return -1;
	}

	//判断源文件是否打开成功
	FILE * sfp = fopen(argv[1],"r");
	if(sfp == 0){
		perror("fopen sfp error");
		return -1;
	}

	//判断目标文件是否打开成功
	FILE * dfp = fopen(argv[2],"w");
	if(dfp == 0){
		perror("fopen dsp error");
		return -1;
	}

	//拷贝
	char tg[128] = "";
	while(!feof(sfp)){
		int res = fread(tg,1,sizeof(tg),sfp);
//		if(res == 0){
//			break;
//		}
		fwrite(tg,1,res,dfp);
	}

	//关闭源文件、目标文件
	fclose(sfp);
	fclose(dfp);
	return 0;
}

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

#include <myhead.h>
//用户结构体
typedef struct
{
	char name[10];
	char passwd[16];
}usr;

//注册
int register_newusr()
{
	//追加的方式打开文件
	FILE *fp = fopen("./usr.account.txt","a+");
	if(fp == NULL){
		perror("fopen error");
		return -1;
	}

	usr new,old;
	//用户输入
	scanf("%s %s", new.name, new.passwd);

	//移动文件光标到文件头
	rewind(fp);
	//遍历判断用户输入与源文件里的是否有相同的
	while(1){
		//遍历源文件
		int res = fscanf(fp,"%s %s", old.name , old.passwd);
		printf("res =%d\n",res);
		if( res == EOF )
		{	
			break;
		}
		//比较用户名
		if( strcmp(new.name , old.name) == 0 )
		{
			printf("创建失败,该用户已存在!\n");
			return 0;
		}
	}
	
	//将用户输入的存入源文件
	int res1 = fprintf(fp,"%s %s\n", new.name, new.passwd);
	//判断成功
	printf("%s %s\n",new.name , new.passwd);
	if(res1 != EOF){
		printf("创建成功!\n");
	}
	//关闭文件
	fclose(fp);
	return 0;
}

//登录
int load_usr()
{
	//打开文件
	FILE * fp = fopen("./usr.account.txt","r");
	if(fp == NULL){
		perror("fopen error");
		return -1;
	}

	usr temp,old;
	//用户输入
	scanf("%s %s", temp.name, temp.passwd);
	//遍历源文件是否有存档
	while(1){
		//遍历源文件
		int res = fscanf(fp,"%s %s",old.name,old.passwd);
		if(res == EOF)
		{
			break;
		}
		//比较是否相同
		if( strcmp(temp.name , old.name) == 0 && strcmp(temp.passwd , old.passwd) == 0 )
		{
			printf("登录成功!\n");
			return 0;
		}
	}

	//遍历完仍没有登录提示
	printf("用户名或密码错误!\n");		
	//关闭文件
	fclose(fp);
	return 0;
}

int main(int argc, const char *argv[])
{
	while(1){
		printf("------登录界面------\n");
		printf("1、注册\n");
		printf("2、登录\n");
		printf("0、退出\n");

		int choice;
		printf("请输入你的选择:");
			scanf("%d",&choice);

		switch(choice){
		case 1:
			register_newusr();
			break;
		case 2:
			load_usr();
			break;
		case 0:
			return 0;
			break;
		default :
			printf("选择有错,请重新选择:\n");
			break;
		}
	}

	return 0;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务