因为fgets在赋值完字符后,在最后会加一个\n换行符,所以为了能够把数组当成字符串,就必须把\n改成\0

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define username "JacksonWu"
#define password "新年快乐" int strlength(char *);
//尝试封装fgets
void getstring(char *, int); /**
*验证传入的用户名和密码是否正确
*参数1,:需要验证的用户名
*参数2:需要验证的密码
*返回:如果用户名和密码合法,返回1,否则返回0
**/ int login(char *, char *); int main()
{
char name[20], word[20];
int len, judge, times, i;
//fgets(name, 20, stdin); for(i = 0; i < 3; i++)
{
printf("请输入用户名:");
getstring(name, 20);
printf("请输入用户密码:");
getstring(word, 20);
judge = login(name , word); if(judge == 1)
{
printf("恭喜你,成功登录!\n");
break;
}
else
{
printf("您输入的用户名或密码不对!\n");
}
times = 2 - i;
printf("您还有%d次机会输入登录信息!\n", times);
} len = strlength(name);
printf("字符串数组的长度为:%d\n",len);
return 0;
} int login(char *name, char *word)
{
int result = 0;
if(strcmp(username , name) == 0 && strcmp(word , password) == 0)
{
result = 1;
}
return result;
} void getstring(char *name, int num)
{
fgets(name, num, stdin);
char *find = strchr(name , '\n');//查找函数,查找换行符给指针
if(find)//如果找到了就执行下面的
*find = '\0';//找到了就把\n换成\0
} int strlength(char name[])
{
int count = 0;
while(name[count] != '\0')
{
//当你封装完函数fgets后,里面就把\n替换了,所以这个if可以不要
/*
if(name[count] == '\n')
{
name[count] = '\0';
break;
}
*/
count++;
}
return count;
}

C语言:对fgets进行封装的更多相关文章

  1. luajit利用ffi结合C语言实现面向对象的封装库

    luajit中.利用ffi能够嵌入C.眼下luajit的最新版是2.0.4,在这之前的版本号我还不清楚这个扩展库详细怎么样,只是在2.04中,真的非常爽.  既然是嵌入C代码.那么要说让lua支持 ...

  2. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

  3. 模块的封装之C语言类的封装

    [微知识]模块的封装(一):C语言类的封装 是的,你没有看错,我们要讨论的是C语言而不是C++语言中类的封装.在展开知识点之前,我首先要 重申两点: 1.面向对象是一种思想,基本与所用的语言是无关的. ...

  4. Java语言简介、基础组成、封装、继承、多态、抽象类、内部类、接口

    目录 Java简介 Java语言基础组成 面向对象 对象 封装 构造函数 this关键字 static(静态关键字) 主函数 静态什么时候用呢? 面向对象(数组工具对象建立) 设计模式 继承 成员变量 ...

  5. 解析大型.NET ERP系统 多国语言实现

    实现多国语言有许多种实现方案,无外乎是一种字符串替换技术,将界面控件的文本标签替换成相应语言的文字..NET Windows Forms实现多国语言的方法有以下几种: 1 .NET的方案,使用资源文件 ...

  6. 【转】浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

  7. c#重点[封装,继承,多肽]

    面向对象的语言三大特点:封装.继承.多态 Ⅰ.封装:是把类的内部隐藏起来,以防止外部世界看见的一个面向对象的概念,通过关键字去控制变量,方法的访问权限. 1).访问修饰符: Ⅱ.继承: eg:我们建一 ...

  8. 基础学习day05---面向对象一类,对象、封装

    一.面向对象   1.1.面向对象的概念    很经典的一句话----------万物皆对象 定义:面向对象一相对面向过程而言的        面向对象和面向过程都是一种思想       面向过程-- ...

  9. C语言的一点操作(学习笔记)

    #include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...

  10. 浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

随机推荐

  1. #线段树,离散#nssl 1476 联

    分析 由于下标过大,考虑离散,不仅仅是区间左右端点 假设只有一个区间从1到\(x\),那么修改后答案应该是\(x+1\) 所以说还要记录右端点+1的位置,你以为这就能A了吗 为了避免标记被覆盖,无论是 ...

  2. OpenHarmony轻量设备Hi3861芯片开发板启动流程分析

    引言 OpenHarmony作为一款万物互联的操作系统,覆盖了从嵌入式实时物联网操作系统到移动操作系统的全覆盖,其中内核包括LiteOS-M,LiteOS-A和Linux.LiteOS-M内核是面向I ...

  3. Seaborn风格设置

    官方网站:seaborn: statistical data visualization - seaborn 0.11.2 documentation (pydata.org) Seaborn是基于m ...

  4. 驾驭数据的能力,如同使用ChatGPT一样,是现代职场人的必修课

    现代职场所比拼的除了聪明才智.过往经验之外,很多软性技能也尤为重要. 现在已经不是像网络游戏开局拿着一根小木棍打天下的时代了,这将是一场武装到牙齿的较量,对于各类"装备"的驾驭能力 ...

  5. 重新点亮linux 命令树————压缩和解压缩[四]

    前言 简单整理一下压缩和解压缩. 正文 在windows 中我们使用压缩和解压缩一般是7z这个压缩和解压软件,但是在linux中压缩和解压是两个不同的软件. 在最早的linux 备份介质是磁带,使用的 ...

  6. nginx 学习的前提

    前言 在nginx 中,需要学会的是如何安装.基础的命令.看懂配置那么这时候才是一切的刚刚开始. 正文 安装可以去看菜鸟驿站的: https://www.runoob.com/linux/nginx- ...

  7. 建设工程工程量清单计价规范2008最新分析报告ppt

    2008版<计价规范>颁布的背景 国务院从2003年起,在全国范围开展清理拖欠工程款.清理拖欠农民工工资的活动.最高人民法院于2004年9月29日发布了<关于审理建设工程施工合同纠纷 ...

  8. Kubernetes 部署集群1.28.2版本(无坑)

    初步搭建一个一个主节点和两个从节点Kubernetes 1.28.2 集群.先准备好机器 | host | hostname | os | role | hardware | | --- | --- ...

  9. OpenKruise v1.3:新增自定义 Pod Probe 探针能力与大规模集群性能显著提升

    简介: 在版本 v1.3 中,OpenKruise 提供了新的 CRD 资源 PodProbeMarker,改善了大规模集群的一些性能问题,Advanced DaemonSet 支持镜像预热,以及 C ...

  10. 真正的HTAP对用户和开发者意味着什么?

    简介: Gartner 2016 年首次提出 HTAP(Hybrid Transaction / Analytical Processing,混合事务分析处理)并给出明确的定义:即同时支持 OLTP ...