作业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