1. 在文件中打印信息如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, const char *argv[])
{
//获取当前时间信息写入到文件中
time_t sysTime,oldTime;
struct tm* sys;
FILE *fp = NULL;
if((fp = fopen("./work1.txt","a+")) == NULL){
perror("work1 open error");
return -1;
}
//获取文件中条数
char buf[10];
int count =0;
while(fgets(buf,sizeof(buf),fp)!= NULL){
//printf("%s\n",buf);
for(int i=0;i<strlen(buf);i++){
if(buf[i] == '\r'){
count++;
}
}
}
//printf("%d\n",count);
while(1){
sysTime = time(NULL);
if(sysTime != oldTime){
oldTime = sysTime;
//&sysTime 这里需要传地址
sys = localtime(&sysTime);
char buf1[100];
snprintf(buf1,sizeof(buf1),"%d: %4d-%02d-%02d %02d:%02d:%02d\r",++count,sys->tm_year+1900,sys->tm_mon+1,
sys->tm_mday,sys->tm_hour,sys->tm_min,sys->tm_sec);
fputs(buf1,stdout);
//把数据写到文件中
fputs(buf1,fp);
fflush(fp);
fflush(stdout);
}
}
//关闭文件
fclose(fp);
return 0;
}
2.将注册登录功能,重新做一遍
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int regist();
int login();
int main(int argc, const char *argv[])
{
//实现注册功能
int enu = -1;
while(1){
//清除终端指令
system("clear");
printf("\t\t=======1. 注册 ======\n");
printf("\t\t=======2. 登录 ======\n");
printf("\t\t=======0. 退出 ======\n");
printf("请输入对应的选项: ");
scanf("%d",&enu);
//吸收\n
getchar();
switch(enu){
case 1:{
regist();
}
break;
case 2:{
login();
}
break;
case 0:return;
default:printf("输入错误!!");
}
printf("请输入任意键退出!");
while(getchar()!='\n');
}
return 0;
}
int regist(){
char regist_name[30];
char regist_pwd[30];
//从终端获取账号及密码
printf("请输入注册账号: ");
fgets(regist_name,sizeof(regist_name),stdin);
regist_name[strlen(regist_name)-1]= 0;
printf("请输入注册密码: ");
fgets(regist_pwd,sizeof(regist_pwd),stdin);
regist_pwd[strlen(regist_pwd)-1]= 0;
FILE *fp = NULL;
if((fp = fopen("./work2.txt","a+")) == NULL){
perror("regist open error");
return -1;
}
//把数据写到文件中
fprintf(fp,"%s %s\n",regist_name,regist_pwd);
printf("注册成功\n");
//关闭文件
fclose(fp);
}
int login(){
char login_name[30];
char login_pwd[30];
char user_name[30];
char user_pwd[30];
//从终端获取账号及密码
printf("请输入登录账号: ");
fgets(login_name,sizeof(login_name),stdin);
login_name[strlen(login_name)-1]= 0;
printf("请输入登录密码: ");
fgets(login_pwd,sizeof(login_pwd),stdin);
login_pwd[strlen(login_pwd)-1]= 0;
FILE *fp = NULL;
if((fp = fopen("./work2.txt","a+")) == NULL){
perror("regist open error");
return -1;
}
int flag =0;
//文件是否读到最后
while(!feof(fp)){
fscanf(fp,"%s %s",user_name,user_pwd);
//printf("222 %s",user_name);
//判断用户名 密码是否相等
if(strcmp(login_name,user_name) == 0 && strcmp(login_pwd,user_pwd) == 0){
flag++;
printf("输入的账号密码正确\n");
break;
}
}
if(flag == 0){
printf("输入的账号密码不正确!\n");
}
return 0;
}
3. 使用fread\fwrite完成两个文件的拷贝
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Stu{
char name[30];
double score;
};
int main(int argc, const char *argv[])
{
//从控制台输入两个文件,实现文件拷贝
if(argc != 3){
printf("please enter filename\n");
return -1;
}
//源文件
FILE *descFile =NULL;
//目标文件
FILE *targeFile =NULL;
if(( descFile = fopen(argv[1],"r")) == NULL){
perror("descFile open error");
return -1;
}
if((targeFile = fopen(argv[2],"a+"))==NULL){
perror("targeFile open error");
return -1;
}
while(!feof(descFile)){
//读
struct Stu rea;
fread(&rea,sizeof(rea),1,descFile);
//写
fwrite(&rea,sizeof(rea),1,targeFile);
}
//关闭文件
fclose(descFile);
fclose(targeFile);
return 0;
}
4. 思维导图