1、完成标准io的单字符实现两个文件的拷贝;
#include<myhead.h>
//标准io的单字符现两个文件的拷贝;
int main(int argc, const char *argv[])
{
//判断是否有3个文件传入
if(3 != argc){
fputs("input file error\n",stderr);
return -1;
}
//打开源文件
FILE *src = fopen(argv[1] , "r");
//判断源文件是否打开成功
if(src == NULL){
perror("fopen argv[1] error");
return -1;
}
//打开目标文件
FILE *dest = fopen(argv[2] , "w");
//判断目标文件是否打开成功
if(dest == NULL){
perror("fopen argv[2] error ");
return -1;
}
//定义变量读取数据
while(1){
int res = fgetc(src);
if(res == EOF){
break;
}
fputc(res, dest); //将变量的数据写入目标文件中
printf("读取到的数据为:%c\n",res);
}
//关闭文件
fclose(src);
fclose(dest);
return 0;
}
2、完成标准io的字符串实现两个文件的拷贝;
#include<myhead.h>
//标准io的字符串实现两个文件的拷贝
int main(int argc, const char *argv[])
{
//判断是否有3个文件传入
if(3 != argc){
fputs("input file error\n",stderr);
return -1;
}
//打开源文件
FILE *src = fopen(argv[1] , "r");
//判断源文件是否打开成功
if(src == NULL){
perror("fopen argv[1] error");
return -1;
}
//打开目标文件
FILE *dest = fopen(argv[2] , "w");
//判断目标文件是否打开成功
if(dest == NULL){
perror("fopen argv[2] error ");
return -1;
}
//定义字符数组接收读取源文件的数据
char arr[20]="";
while(1){
char *res = fgets(arr,sizeof(arr),src);
if(res == NULL){
break;
}
fputs(arr, dest); //将变量的数据写入目标文件中
printf("读取到的数据为:%s\n",res);
}
//关闭文件
fclose(src);
fclose(dest);
return 0;
}
3、完成标准io的格式化实现两个文件的拷贝;
#include<myhead.h>
//标准io的格式化实现两个文件的拷贝
int main(int argc, const char *argv[])
{
//判断是否有3个文件传入
if(3 != argc){
fputs("input file error\n",stderr);
return -1;
}
//打开源文件
FILE *src = fopen(argv[1] , "r");
//判断源文件是否打开成功
if(src == NULL){
perror("fopen argv[1] error");
return -1;
}
//打开目标文件
FILE *dest = fopen(argv[2] , "w");
//判断目标文件是否打开成功
if(dest == NULL){
perror("fopen argv[2] error ");
return -1;
}
//定义字符数组接收读取源文件的数据
char a;
while(1){
int res = fscanf(src,"%c",&a);
if(res<1){
break;
}
fprintf(dest,"%c",a); //将变量的数据写入目标文件中
printf("读取到的数据为:%c\n",a);
}
//关闭文件
fclose(src);
fclose(dest);
return 0;
}
4、完成标准io的模块化实现两个文件的拷贝;
#include<myhead.h>
//标准io的模块化实现两个文件的拷贝
int main(int argc, const char *argv[])
{
//判断是否有3个文件传入
if(3 != argc){
fputs("input file error\n",stderr);
return -1;
}
//打开源文件
FILE *src = fopen(argv[1] , "r");
//判断源文件是否打开成功
if(src == NULL){
perror("fopen argv[1] error");
return -1;
}
//打开目标文件
FILE *dest = fopen(argv[2] , "w");
//判断目标文件是否打开成功
if(dest == NULL){
perror("fopen argv[2] error ");
return -1;
}
//定义字符数组接收读取源文件的数据
char arr[20]="";
while(1){
int res = fread(arr,1,sizeof(arr),src);
if(res<1){
break;
}
fwrite(arr,1,res, dest); //将变量的数据写入目标文件中
printf("读取到的数据为:%s\n",arr);
}
//关闭文件
fclose(src);
fclose(dest);
return 0;
}
5、实现注册和登录功能,将注册账号和密码存储到文件中,登录时遍历文件如果存在就登录成功否则登录失败
#include<myhead.h>
void menu();
void login_system();
int usr_login();
int usr_register();
int main(int argc, const char *argv[])
{
login_system();
return 0;
}
void menu()
{
printf("\t\t********用户登录系统********\n");
printf("\t\t1、登录\n");
printf("\t\t2、注册\n");
printf("\t\t3、退出系统\n");
}
//登录函数
int usr_login()
{
//定义变量账号和密码
char id[20]="";
char password[20]="";
printf("请输入登录账号:");
scanf("%s",id);
printf("请输入登录密码:");
scanf("%s",password);
//打开文件读取数据
FILE *fp = fopen("./user.txt" , "r");
//判断用户文件是否打开成功
if(fp == NULL){
perror("fopen user.txt error");
return -1;
}
//定义两个字符数组接收用户文件的数据
char arr[20]="";
char brr[20]="";
while(1){
int res=fscanf(fp,"%s%s",arr,brr);
if(res==EOF)
break;
if((strcmp(id,arr)==0)&&(strcmp(password,brr)==0)) //判断是否登录成功
{
printf("登录成功\n");
return -1;
}
else
{
printf("登录失败\n");
return -1;
}
}
fclose(fp);
}
//注册函数
int usr_register()
{
//定义变量账号和密码
char re_id[20]="";
char re_password[20]="";
printf("请输入注册账号:");
scanf("%s",re_id);
printf("请输入注册密码:");
scanf("%s",re_password);
//打开文件写入数据
FILE *fp = fopen("./user.txt" , "a+");
//判断用户文件是否打开成功
if(fp == NULL){
perror("fopen user.txt error");
return -1;
}
fprintf(fp,"%s %s\n",re_id,re_password);
fclose(fp);
printf("注册成功\n");
}
void login_system()
{
int option;
while (1)
{
menu();
printf("请输入你的选择:");
scanf("%d", &option);
getchar(); // 清除输入缓冲区中的换行符
switch (option)
{
case 1: //登录
usr_login();
break;
case 2: //注册
usr_register();
break;
case 3:
printf("退出系统\n"); // 退出系统
exit(0);
default:
printf("输入有误,请重新输入\n");
break;
}
}
}
效果展示: