IO进程线程2.18

作业1:用fgets统计给定文件的行数

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc ,const char *argv[])
{ 
  FILE *fp=NULL;          //操作文件的句柄
 if((fp=fopen("./test.txt","r"))==NULL)      //只读形式打开文件,加括号提高优先级
 {
   perror("fopen error");
   return -1;
 }
 int count=0;
 while(1)
 {
   char ch=fgetc(fp);        //从fp指向的文件中读取一个字符
   if(ch==EOF)            //说明读取到文件结束
   {
     break;
   }
   if(ch=='\n')
   {
    count++;
   }
 }
 printf("count=%d\n",count);
 fclose(fp);                 //关闭文件
 return 0;
}

作业2:使用fputs和fgets完成两个文件的拷贝

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc ,const char *argv[])
{
  FILE *w=NULL;           
  FILE *r=NULL;            //操作文件的句柄
  if((r=fopen("./test.txt","r"))==NULL)       //以只读形式打开文件
  {
    perror("error");
    return -1;
  }
  if((w=fopen("./test1.txt","w"))==NULL)      //以只写形式打开文件
  {
    perror("error");
    return -1;
  }
  while(1)
  {
   char ch=fgetc(r);             //从r指向的文件中读取一个字符
   fputc(ch,w);                  //将ch指向的文件中的字符写入w指向的文件
   if(ch==EOF)                 //读取到文件结束
   {
     break;
   }
  }
  fclose(w);
  fclose(r);
}

作业3:完成注册登录功能

做个小菜单,功能1是注册功能,输入注册账户和注册密码,将账户和密码写入文件中

功能2是登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配则提示登录失败

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int num = 0;
    int ID=0;
    int password=0;
    while(1)
    {
        printf("---------主菜单-------\n");
        printf("---------1.注册---------\n");
        printf("---------2.登录---------\n");
        printf("---------3.退出---------\n");
        printf("please enter number:");
        scanf("%d", &num);
        getchar();//吸收垃圾字符
        switch(num)                  //对菜单多分支选择
        {
        case 1:                       //注册功能
            {
		FILE *fp=NULL;
		if(( fp=fopen("./ID.txt","a+")) == NULL)      //以追加的形式打开文件
		{
		  perror("fopen error");
		  return -1;
		}
		printf("please enter ID:");      //注册账户和密码
		scanf("%d",&ID);
		printf("please enter password:");
		scanf("%d",&password);
		fprintf(fp,"%d %d\n",ID,password);
		fclose(fp);                    //关闭文件
            }
            break;
        case 2:                          //登录功能
            {
		FILE *fp=NULL;
		if(( fp=fopen("./ID.txt","r")) == NULL)
		{
		  perror("fopen error");
		  return -1;
		}
		printf("please enter ID:");//提示输入账户和密码
		scanf("%d",&ID);
		printf("please enter password:");
		scanf("%d",&password);
		while(1)    //查询账户密码是否正确
		{
		  int ID2;//获取注册的账户
		  fscanf(fp,"%d",&ID2);
		  int password2;//获取注册的密码
		  fscanf(fp,"%d",&password2);
		  if(ID2==ID&&password2==password)
		  {
		    puts("登录成功");
		    break;
		  }
		  else
		  {
		    puts("账户或密码不正确");
		    break;
		  }
		  if(ID2==EOF||password2==EOF)
		  {
		    break;
		  }
		}
		fclose(fp);
            }
            break;
        case 3:goto out;            //退出菜单
        default:printf("error and please try again\n");
        }
        printf("请输入任意键按回车结束!!!\n");
        while(getchar() != '\n');
    }
    out:
	return 0;
}  

思维导图

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值