IO(1)

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


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


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

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值