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