任务1> 使用fgets函数计算给定文件中的行数。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, const char *argv[])
{
FILE *fp=NULL;
if((fp=fopen("./test.txt","r"))==NULL)
{
perror("fopen error");
return -1;
}
char buf[5]="";
int line=0;
while(1)
{
char *ptr=fgets(buf,sizeof(buf),fp);
if(ptr==NULL)
break;
for(int i=0;i<5;i++)
{
if(buf[i]=='\n')
{
line++;
break;
}
}
puts(buf);
}
printf("line=%d\n",line);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/f98821dc6afcb50858133a50ce79fd85.png)
任务2> 使用fputs和fgets函数复制两个文件的内容。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, const char *argv[])
{
if(argc!=3)
{
puts("error");
return -1;
}
FILE *fp=NULL;
if((fp=fopen(argv[1],"r"))==NULL)
{
perror("fopen error");
return -1;
}
char buf[5]="";
FILE *fp1=NULL;
if((fp1=fopen(argv[2],"a"))==NULL)
{
perror("fopen error");
return -1;
}
while(1)
{
char *ptr=fgets(buf,sizeof(buf),fp);
if(ptr==NULL)
break;
fputs(buf,fp1);
}
fclose(fp);
fclose(fp1);
if((fp1=fopen(argv[2],"r"))==NULL)
{
perror("fopen error");
return -1;
}
while(1)
{
char *ptr=fgets(buf,sizeof(buf),fp1);
if(ptr==NULL)
break;
puts(buf);
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/1f6f51ee10757f21b01f81f4e51224e7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6de25c39a1d82c8964f7a40c078878b4.png)
任务3> 实现一个小型菜单,用于注册和登录功能。
功能1是用于注册,用户输入他们想要的账户名和密码,然后将其写入文件。
功能2是用于登录,用户被提示输入他们的账户名和密码。程序将遍历文件中每组账户名和密码。如果成功匹配,则用户将被登录;否则,他们将收到登录失败的通知。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int menu = 0;
while(1)
{
system("clear"); //执行终端指令
printf("\t\t======XXX登录界面============\n");
printf("\t\t======1、注册============\n");
printf("\t\t======2、登录============\n");
printf("\t\t======0、退出============\n");
printf("请输入选项:");
scanf("%d", &menu);
getchar();
//对菜单多分支选择
switch(menu)
{
case 1:
{
char username[20];
char password[20];
printf("请输入用户名:");
scanf("%s", username);
getchar();
printf("请输入密码:");
scanf("%s", password);
getchar();
// 打开user文件,以追加的方式写入注册信息
FILE *file = fopen("user.txt", "a");
if (file == NULL) {
printf("无法打开文件\n");
break;
}
// 将用户名和密码写入文件
fprintf(file, "%s %s\n", username, password);
// 关闭文件
fclose(file);
printf("注册成功!\n");
}
break;
case 2:
{
char username[20];
char password[20];
int found = 0;
printf("请输入用户名:");
scanf("%s", username);
getchar();
printf("请输入密码:");
scanf("%s", password);
getchar();
// 打开user文件,以读取的方式查找匹配的用户名和密码
FILE *file = fopen("user.txt", "r");
if (file == NULL) {
printf("无法打开文件\n");
break;
}
char file_username[20];
char file_password[20];
// 逐行读取文件中的用户名和密码,并与输入的用户名和密码进行比较
while (fscanf(file, "%s %s", file_username, file_password) != EOF) {
if (strcmp(username, file_username) == 0 && strcmp(password, file_password) == 0) {
found = 1;
break;
}
}
// 关闭文件
fclose(file);
if (found) {
printf("登录成功!\n");
} else {
printf("用户名或密码错误!\n");
}
}
break;
case 0:goto END;
default:printf("您输入的功能有误,请重新输入\n");
}
//提示输入任意键按回车结束
printf("请输入任意键按回车结束!!!\n");
while(getchar() != '\n');
}
END:
return 0;
}