IO Day1

作业1:

注册用户名和密码,空格隔开,不允许重复注册
从终端获取账号密码,判断是否正确
若账号不存在,输出账户不存在
若账户存在,密码错误,输出密码错误
若账户密码均正确,输出登陆成功 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Create_User(FILE *fp,FILE *rfp);
void Login_User(FILE *fp,FILE *rfp);

int main(int argc, const char *argv[])
{
	FILE *fp=fopen("./user.txt","a");//流指针fp,以追加的方式创建并打开文件user.txt
	FILE *rfp=fopen("./user.txt","r");//流指针rfp,以只读的方式打开文件
	if(NULL == fp || NULL == rfp)
	{
		perror("fopen");
		return -1;
	}
	
	puts("1.登陆账户\n2.创建新用户\nelse.退出");//让用户选择

	char s;
	scanf("%c",&s);
	if('1'==s)
	{
		Login_User(fp,rfp);//调用登陆账户的函数
	}
	else if('2'==s)
	{
		Create_User(fp,rfp);//调用创建新用户的函数
	}
	else
	{
		return 0;//退出
	}

}

//创建新用户
void Create_User(FILE *fp,FILE *rfp) 
{
	char username[20];
	char password[20];
	puts("please enter username and password:");
	scanf("%s %s",username,password);//用户输入用户名和密码

	char str[20];
	while (1)//读取user.txt的内容
	{
		if (EOF == fscanf(rfp,"%s",str)) //如果读取完毕,跳出循环,说明没有找到重复用户名,继续执行while后面的代码
		{
			break;
		}
		if(strcmp(str,username)==0)//如果读取到和输入的用户名相同的字符串,说明有重复
		{
			puts("已有该用户,不允许重复注册");
			return;
		}	
	}

	//while循环通过break跳出,才会执行到这里的代码
	fprintf(fp,"%s %s\n",username,password); //创建新用户

	puts("创建成功,是否现在登陆?按n退出");
	char s;
	if('n' == s || 'N' == s)
	{
		return; //用户选择退出
	}
	Login_User(fp,rfp);	//用户选择现在登陆,调用登陆函数
}

//用户登陆函数
void Login_User(FILE *fp,FILE *rfp)
{
	char username[20];
	char password[20];
	puts("please enter username and password:");
	scanf("%s %s",username,password);

	//读取user.txt的内容
	char str[20];
	static int  i=0;
	while(1)
	{
		if(EOF == fscanf(rfp,"%s",str))
		{
			printf("账户不存在,是否注册?按n退出\n"); //读取完毕时仍没有跳出循环,说明没有该用户
			char s;
			scanf(" %c",&s);
			if('n'==s || 'N' == s)
			{
				return ;
			}
			break; //用户选择注册,跳出循环,执行后面的语句,即注册函数
		}
		
		if(strcmp(username,str)==0) //判断是否读取到该用户名
		{
			fscanf(rfp,"%s",str); //读取下一个字符串,即该用户的密码
			if(strcmp(password,str)==0)//判断密码是否正确
			{
				printf("登陆成功\n");
				return ;
			}
			printf("密码错误");
			return ;	
		}		
	}	
	Create_User(fp,rfp); //如果账户不存在,并且用户选择注册,就会调用注册函数
}

作业2:

#include <stdio.h>

//计算文件大小
int Size_File(FILE *fp)
{
	int c;
	int i=0;
	while (1)
	{
		c = fgetc(fp);
		if(EOF == c)
		{
			break;
		}
		i++;
	}
	return i;
}

//计算文件行数
int Rows_File(FILE *fp)
{
	int c;
	int i=0,j=0;
	while (1)
	{
		c = fgetc(fp);
		if(EOF == c)
		{
			break;
		}
		i++;
		if('\n' == c)
		{
			j++;
		}
	}
	if(i!=0 && j==0)
	{
		j++;
	}
	return j;
}
int main(int argc, const char *argv[])
{
	//文件大小和行数
	FILE *fp=fopen(argv[1],"r");
	FILE *fp1=fopen(argv[1],"r");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}
	
	int i=Size_File(fp);
	int j=Rows_File(fp1);
	
	printf("大小:%d 行数:%d\n",i,j);

	fclose(fp);

	return 0;
}

xmind

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值