因为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. #最大密度子图,0/1分数规划#UVA1389 Hard Life

    题目 \(n\) 个点,\(m\) 条边的一个无向图,问导出子图的边数除以点数的最大值 分析 考虑二分这个答案,也就是0/1分数规划之后转换成 \(E-mid*V>0\) 这个问题虽然可以精确到 ...

  2. #离线#洛谷 5358 [SDOI2019]快速查询

    题目传送门 分析 由于询问次数很多,只能离线去做,考虑全局的操作都可以打标记. 对于单点的操作,实际上的数为 \(x'=x*Mul+Add\) 由于这两个标记单独撤销比较困难, 不妨开一个数组直接维护 ...

  3. #网络流,dinic,最小割#洛谷 3227 [HNOI2013]切糕

    题目传送门 题目大意 \(P\)行\(Q\)列的楼房高度均为\(R\),每一层改造要花费一定的金钱, 每个楼房都要挑选有且仅有一层进行改造,并且相邻两个楼房改造位置的相对高度不能超过\(D\), 问最 ...

  4. 响应式系统reactive system初探

    目录 初识响应式系统 什么是响应式系统 响应式系统的四大特点 及时响应性(Responsive) 恢复性(Resilient) 有弹性(Elastic) 消息驱动(Message Driven) 总结 ...

  5. Docker 11 数据卷

    由来 Docker 是将应用和环境打包成一个镜像. 这样,数据就不应该保存在容器中,否则容器删除,数据就会丢失,有着非常大的风险. 为此,容器和主机之间需要有一个数据共享技术,使得在 Docker 容 ...

  6. 教你构建一个优秀的SD Prompt

    构建一个优秀的Prompt 在使用Stable Diffusion AI时,构建一个有效的提示(Prompt)是至关重要的第一步.这个过程涉及到创造性的尝试和对AI行为的理解.这里我会对如何构建一个好 ...

  7. ​总结:Apache/Tomcat/JBOSS/Jetty/Nginx之区别和联系​

    总结:Apache/Tomcat/JBOSS/Jetty/Nginx之区别和联系 总结:Apache/Tomcat/JBOSS/Nginx区别 . 1.Apache是Web服务器,Tomcat是应用( ...

  8. 实战指南:使用 xUnit.DependencyInjection 在单元测试中实现依赖注入【完整教程】

    引言 上一篇我们创建了一个Sample.Api项目和Sample.Repository,并且带大家熟悉了一下Moq的概念,这一章我们来实战一下在xUnit项目使用依赖注入. Xunit.Depende ...

  9. k8s 深入篇———— pod 实战[六]

    前言 pod 实战一下,主要是一些例子. 正文 例子一 pod 实例的选择: NodeSelector:是一个供用户将 Pod 与 Node 进行绑定的字段 NodeName:一旦 Pod 的这个字段 ...

  10. redis 简单整理——客户端管理[十六]

    前言 简单介绍一下客户端管理. 正文 Redis提供了客户端相关API对其状态进行监控和管理,这个一般有很多工具了,看看就好,没有必要去细看.