本文主要是介绍8.21练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.使用分文件编译,实现注册登录界面,使用fgets,fscanf,fpritnf函数
log.h
#ifndef _LOG_H
#define _LOG_H
#include<myhead.h>// 定义一个结构体类型 usr,用于存储用户的账号信息
typedef struct {char name[20];char pass[20];}usr;
// 声明登录函数
int login();
// 声明注册函数
int regist();#endif
main.c
#include"log.h"int main (int argc, const char *argv[])
{while(1){//显示菜单选项printf("\t\t1.注册\n");printf("\t\t2.登录\n");printf("\t\t3.退出\n");printf("请输入要选择的选项:\n");//获取用户的选择char ch;scanf("%c",&ch);getchar();switch(ch){case '1':regist();break;//注册case '2':login();break;//登录case '3':exit(EXIT_SUCCESS);break;//终止程序default:printf("输入错误!");break;}}return 0;
}
login.c
#include"log.h"int login(){// 定义两个用户结构体变量:usr1 用于存储从文件读取的用户信息,cmp 用于存储用户输入的信息usr usr1,cmp;FILE *fp = fopen("./1.txt","r");if(fp==NULL){perror("fp");return -1;}printf("请输入要登录的账号:\n");fgets(cmp.name,sizeof(cmp.name),stdin);printf("请输入要登录的密码:\n");fgets(cmp.pass,sizeof(cmp.pass),stdin);// 去除账号和密码末尾的换行符cmp.name[strlen(cmp.name)-1]='\0';cmp.pass[strlen(cmp.pass)-1]='\0';// 从文件中读取注册的账号和密码fscanf(fp,"%s",usr1.name);
// usr1.name[strlen(usr1.name)]='\n';
// usr1.name[strlen(usr1.name)+1]='\0';fscanf(fp,"%s",usr1.pass);
// usr1.pass[strlen(usr1.pass)]='\n';
// usr1.pass[strlen(usr1.pass)+1]='\0';// 比较用户输入的账号和密码与文件中的信息是否匹配
if(strcmp(cmp.name,usr1.name)==0&&strcmp(cmp.pass,usr1.pass)==0){printf("登陆成功!\n");}else{printf("账号或密码错误!\n");}fclose(fp);return 0;
}
regist.c
#include"log.h"int regist(){// 打开文件1.txt,使用写模式FILE *fp=fopen("./1.txt","w");if(fp==NULL){perror("fp");return -1;}// 定义用户结构体变量usr a;printf("请输入要注册的姓名:\n");fgets(a.name,sizeof(a.name),stdin);printf("请输入要注册的密码:\n");fgets(a.pass,sizeof(a.pass),stdin);// 将姓名和密码写入文件,按顺序写入fprintf(fp,"%s%s",a.name,a.pass);fclose(fp);return 0;
}
2.使用fread和fwrite拷贝文件
#include <myhead.h>int main(int argc, const char *argv[]) {// 定义文件指针变量FILE *fp, *des;// 打开源文件1.txt,以只读模式打开fp = fopen("./1.txt", "r");if(fp == NULL){perror("源文件打开失败!");return -1;}// 打开目的文件2.txt,以写模式打开des = fopen("2.txt", "w");if(des == NULL){perror("目的文件打开失败!");fclose(fp);return -1;}char buff[1024];// 进入循环,从源文件读取数据并写入到目的文件while(1) {int a = fread(buff, 1, sizeof(buff), fp);fwrite(buff, 1, a, des);// 如果读取到的数据大小为0,说明已到达文件末尾,退出循环if(a == 0){break;}}// 关闭源文件和目的文件fclose(fp);fclose(des);// 返回0表示程序成功执行return 0;
}
这篇关于8.21练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!