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