标准IO函数练习

news2024/12/23 10:05:42

一、实现登录功能。

自定义一个usr.txt,手动输入账户密码,格式如下:账户 密码

例如: zhangsan 12345

            lisi abcde

            wangwu abc123

需求如下:

  1. 从终端获取账户密码,与文件中的账户密码比较
  2. 若终端输入的账户不存在,则输出账户不存在
  3. 若终端输入的账户存在,但是密码不正确,则输出密码错误
  4. 若账户密码均正确,则输出登录成功
/*自定义usr.txt*/
chenqian 123456
wangfeng 123456
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
	char name[10];
	char password[10];
	printf("name:");
	scanf("%s",name);
	printf("password:");
	scanf("%s",password);
	FILE *fp = fopen("./usr.txt","r");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}
	char name_t[10];
	char password_t[10];
	int c;
	while(strcmp(name,name_t) != 0)
	{
		c = fscanf(fp,"%s%s",name_t,password_t);
		if(EOF == c)
			break;
	}
	if(0 == strcmp(name,name_t))
	{
		if(0 == strcmp(password,password_t))
			printf("成功登陆!\n");
		else
			printf("密码错误!\n");
	}
	else 
		printf("账户不存在!\n");

	if(fclose(fp) < 0)
	{
		perror("fclose");
		return -1;
	}
	return 0;
}
/*输入输出样例*/
ubuntu@ubuntu:day1$ gcc homework.c 
ubuntu@ubuntu:day1$ ./a.out 
name:wangfeng
password:123456
成功登陆!
ubuntu@ubuntu:day1$ ./a.out 
name:wangfeng
password:123
密码错误!
ubuntu@ubuntu:day1$ ./a.out 
name:zhangsan
password:123456
账户不存在!

附加题:

        实现注册功能,注册的账户密码存储在上一题的文件中。不能重复注册

#include <stdio.h>
int main(int argc, const char *argv[])
{
	char c;
	printf("Do you want to register:");
	scanf("%c",&c);
	if('Y' == c || 'y' == c)
	{
		char name[10];
		char password[10];
		printf("name:");
		scanf("%s",name);

		char name_t[10];
		int a;
		FILE *fp = fopen("usr.txt","r");
		while(0 != strcmp(name,name_t))
		{
			a = fscanf(fp,"%s",name_t);
			if(EOF == a)
				break;
		}
		if(0 == strcmp(name,name_t))
		{
			printf("用户名已存在!\n");
			return -1;
		}
		else
		{
			printf("password:");
			scanf("%s",password);
			fclose(fp);
			fp = fopen("usr.txt","a");
			fprintf(fp,"%s %s\n",name,password);
		}
		fclose(fp);
	}
	return 0;
}

总代码:

#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
	char name[10]="";
	char password[10]="";
	char name_t[10]="";
	char password_t[10]="";
	int c;

	printf("name:");  //输入用户名
	scanf("%s",name);

	FILE *fp = fopen("./usr.txt","r");  //打开文件
	while(0 != strcmp(name,name_t))
	{
		c = fscanf(fp,"%s%s",name_t,password_t);
		if(EOF == c)
			break;
	}
	if(0 != strcmp(name,name_t))
	{
		printf("账户不存在!\n");
		fclose(fp);
		char a;
		printf("Do you want to register:");
		scanf(" %c",&a);
		if('Y' == a || 'y' == a)
		{
			printf("name:");
			scanf("%s",name);
			fp = fopen("usr.txt","r");
			while(0 != strcmp(name,name_t))
			{
				c = fscanf(fp,"%s",name_t);
				if(EOF == c)
					break;
			}
			if(0 == strcmp(name,name_t))
			{
				printf("用户名已存在!\n");
				return -1;
			}
			else
			{
				printf("password:");
				scanf("%s",password);
				fclose(fp);
				fp = fopen("usr.txt","a");
				fprintf(fp,"%s %s\n",name,password);
			}
		}
	}
	else
	{
		printf("password:");
		scanf("%s",password);

		if(0 == strcmp(password,password_t))
			printf("成功登陆!\n");
		else
			printf("密码错误!\n");
	}
	return 0;
}

 二、用fgetc与fputc函数实现:

  1. 文件拷贝,例如将1.txt的内容拷贝到2.txt中
  2. 要求用fgetc计算一个文件有多少个字节
  3. 用fgetc计算一个文件有几行?
#include <stdio.h>
int main(int argc, const char *argv[])
{
	FILE *fp = fopen("./1.txt","r");
	FILE *fp_t = fopen("./2.txt","w");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}
	char c;
	int count=0,line=0;
	while((c = fgetc(fp)) != EOF)
	{
		count++;
		if(c == '\n')
			line++;
		fputc(c,fp_t);
	}
	printf("文件有%d字节,有%d行\n",count,line);
	fclose(fp);
	fclose(fp_t);
	return 0;
}

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/788309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好看的思维导图模板有哪些?分享这几款

好看的思维导图模板有哪些&#xff1f;思维导图是一种非常实用的工具&#xff0c;可以帮助我们更好地组织和理解信息。然而&#xff0c;如果你想让你的思维导图看起来更好看&#xff0c;吸引人眼球&#xff0c;那么选择一个好的思维导图模板是非常重要的。 在众多的思维导图制作…

【STM32】 强大的 STM32Cube 生态 STM32CubeIDE 无伤速通

本文介绍的软件&#xff0c;均可以在ST官网st.com免费下载&#xff08;你需要注册登录&#xff09;&#xff0c;首选官网下载最新版本&#xff0c;如果有问题&#xff0c;可以在我的公众号回复&#xff1a;Cube&#xff0c;获取截止今日的最新版本软件安装包。 目录 一、STM32C…

传统域名与区块链域名的区别是什么?

区块链技术的发展&#xff0c;不仅带来了数字货币的兴起&#xff0c;还催生了一种新型的互联网域名——Web3 域名。Web3 域名作为一种新兴的域名体系&#xff0c;与传统的域名有着很大的区别。今天&#xff0c;我们就来探讨一下传统域名与区块链域名的区别。 首先&#xff0c;让…

查看docker容器启动参数

查看docker启动参数 1、查看docker容器的自启动策略2、查看docker容器的日志滚动清理策略 以下配置命令以redis容器为例 1、查看docker容器的自启动策略 docker inspect --format{{json .HostConfig.RestartPolicy}} redis输出的name是always 表示此容器是开机自启动的&#x…

蓝桥杯上岸必背!!!(第六期树与图的遍历)

第六期&#xff1a;树与图的遍历 &#x1f525; &#x1f525; &#x1f525; 蓝桥杯热门考点模板总结来啦✨ ~ 你绝绝绝绝绝绝对不能错过的常考树与图的遍历模板 &#x1f4a5; ❗️ ❗️ ❗️ 大家好 我是寸铁 &#x1f4aa; 祝大家4月8号蓝桥杯上岸 ☀️ 还没背熟模板…

2.1数据结构——线性表

一、定义 线性表是具有相同数据类型的n&#xff08;n>0&#xff09;个数据元素的有限序列&#xff0c;&#xff08;n表示表长&#xff0c;n0为空表&#xff09; 用L表示&#xff1a; 位序&#xff1a;线性表中的“第i个” a1是表头元素&#xff1b;an是表尾元素 除第一个…

2023 年牛客多校第三场题解

A World Fragments I 题意&#xff1a;给定两个二进制数 x , y x,y x,y&#xff0c;每次可以选择 x x x 二进制表达中的其中一位 b b b&#xff0c;然后执行 x ← x − b x \leftarrow x-b x←x−b 或 x ← x b x \leftarrow xb x←xb。问 x x x 最少经过多少次操作变成…

高速数据采集专家-FMC140【产品手册】

FMC140是一款具有缓冲模拟输入的低功耗、12位、双通道&#xff08;5.2GSPS/通道&#xff09;、单通道10.4GSPS、射频采样ADC模块&#xff0c;该板卡为FMC标准&#xff0c;符合VITA57.1规范&#xff0c;该模块可以作为一个理想的IO单元耦合至FPGA前端&#xff0c;8通道的JESD204…

第一启富金:现货黄金市场等待央行决议 非美商品‘弱不禁风’

第一启富金基本面分析&#xff1a; 中国纸黄金交易通显示&#xff0c;全球最大黄金上市交易基金(ETF)截至07月22日持仓量为919.00吨&#xff0c;较上日增持5.20吨&#xff0c;本月止净减持2.90吨。 在俄罗斯上周退出黑海谷物协议&#xff0c;摧毁了乌克兰通往基辅的一条出口路线…

PKCS#1: RSA加密时摘要值规范

RSA的加密和签名标准是类似的&#xff0c;加密时的摘要值结构如下 即非普通的hash摘要值&#xff0c;而是der编码结构的hash摘要值&#xff0c;用ASN1工具打开 可以快速的组装成一个der编码结构的摘要值&#xff0c;代码如下 ByteArrayOutputStream digestInfoValueBuf new By…

《向量数据库指南》:向量数据库Pinecone如何集成OpenAI

目录 嵌入式介绍 环境设置 创建嵌入 初始化Pinecone索引 填充索引 ⚠️警告 查询 本指南介绍了将OpenAI的大型语言模型(LLMs)与Pinecone(称为 OP stack )集成的方法,增强LLMs的语义搜索或“长期记忆”。此组合利用LLMs的嵌入和完成(或生成)端点,以及Pinecone的向…

MySQL 数据库约束

目录 一、数据库约束 1、约束类型 二、NULL 约束 三、unique 约束 四、default 约束 五、primary key 约束 自增主键 六、foreign key 外键约束 七、check 约束 一、数据库约束 我们使用数据库来存储数据&#xff0c;一般是希望这里存储的数据是靠谱的&#xff0c;…

追觅科技,拿什么撑起「百亿」野心?

作者 | 刘然 来源 | 洞见新研社 极度内卷的扫地机人赛道迎来了分叉路口。 从头部企业的最新动向&#xff0c;我们可以一览行业变化。 科沃斯选择多元化发展&#xff0c;大力拓展家电品类&#xff0c;推出了智能料理机、空气净化仪等产品&#xff1b;石头科技坚守爆品战略的同…

超详细,自动化测试allure测试报告实战(总结)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 allure可以输出非…

【Kubernetes运维篇】ingress-nginx实现业务灰度发布详解

文章目录 一、理论&#xff1a;实现灰度发布的几种场景1、场景一&#xff1a;将新版本灰度给部分用户2、场景二&#xff1a;按照比例流程给新版本3、实现灰度发布字段解释 二、实践&#xff1a;1、实验前提环境2、基于Request Header(请求头)进行流量分割3、基于Cookie进行流量…

FAPI15 探针,作为代谢剂进行PETCT检测,反应机理说明

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ PART1----FAPI-15试剂 英文名称&#xff1a;FAPI-15 CAS号&#xff1a;N/A 分子式&#xff1a;N/A 分子量&#xff1a;N/A 规格标准&#xff1a;1g&#xff0c;5g&#xff0c;10g&#xff0c;可提供mg级以及kg级的产品开发…

docker容器引擎(四)

docker 一、docker compose的理论二、docker-compose工具实验创建apache容器创建LNMP 一、docker compose的理论 docker compose简而言之就是实现单机容器集群编排管理&#xff08;使用一个模板文件定义多个应用容器的启动参数和依赖关系&#xff0c;并使用docker compose来根…

专项练习-04编程语言-03JAVA-03

1. java 中哪个关键字可以对对象加互斥锁&#xff1f;A transient B synchronized C serialize D static 正确答案&#xff1a;B 官方解析&#xff1a;暂无官方题目解析&#xff0c;去讨论区看看吧&#xff01; 知识点&#xff1a;Java、Java工程师、20172. 关于异常处理机制的…

93.qt qml-自定义Table优化(新增:水平拖拽/缩放自适应/选择使能/自定义委托)

之前我们更新了90.qt qml-Table表格组件(支持表头表尾固定/自定义颜色/自定义操作按钮/排序)_qml 表格_诺谦的博客-CSDN博客 但是一直没出源码,是因为该demo还存在问题,那就是表头表尾固定下,如果是半透明状态下,会看到表头表尾固定后的内容,所以只能重构代码,不能使用重…

关于阅读《重构的时机和方法》这本书所带来的启发

前言 近期&#xff0c;我阅读了由克里斯蒂安克劳森&#xff08;Christian Clausen&#xff09;写的、由郭涛翻译的《重构的时机和方法》这本书&#xff0c;读完这本书的内容你会发现《重构的时机和方法》是一本经典的软件开发书籍&#xff0c;它能够帮助软件开发人员提高代码质…