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;
}