因为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. #dp,vector#AT2567 [ARC074C] RGB Sequence

    题目 分析 一种很正常的想法就是设\(dp[i][j][k]\), 表示前\(i\)个格子,其它两种颜色出现的位置分别为\(j,k,j>k或j=k=0(可取两种颜色)\)的方案数 那么颜色种类限 ...

  2. 国产Linux发行版 Deepin 评价与主观展望 我与Deepin的故事

    全文皆属于up自己的主观臆断,有不到之处可以进行批评,共同成长. P1 编辑时间(2021-2-20) 昨天,我刷b站的时候见到一则旧闻,关于我国操作系统的.原本只是想写个1000字左右的评论的,没想 ...

  3. C# Dev GridControl小结

    1. 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2. 如何新增一条记录 (1).gridView.Ad ...

  4. MindSpore自动微分小技巧

    技术背景 基于链式法则的自动微分技术,是大多数深度学习框架中所支持的核心功能,旨在更加快速的进行梯度计算,并且可以绕开符号微分的表达式爆炸问题和手动微分的困难推导问题.本文主要基于MindSpore框 ...

  5. 用HarmonyOS做一个可以手势控制的电子相册应用(ArkTS)

    介绍 本篇 Codelab 介绍了如何实现一个简单的电子相册应用,主要功能包括: 1.  实现首页顶部的轮播效果. 2.  实现页面多种布局方式. 3.  实现通过手势控制图片的放大.缩小.左右滑动查 ...

  6. C++ 解引用与函数基础:内存地址、调用方法及声明

    C++ 解引用 获取内存地址和值 在上一页的示例中,我们使用了指针变量来获取变量的内存地址(与引用运算符 & 一起使用).但是,你也可以使用指针来获取变量的值,这可以通过使用 * 运算符(解引 ...

  7. Python根据主播直播时间段判定订单销售额归属

    写在前面:最近在群里看到一个这样的直播电商的场景觉得还是挺有趣的,于是就想用Python来实现. 需求描述:根据主播直播时间段结合销售订单的付款时间判断所属销售的归属 生成主播在线直播时间段数据 fr ...

  8. 树模型--ID3算法

    基于信息增益(Information Gain)的ID3算法 ID3算法的核心是在数据集上应用信息增益准则来进行特征选择,以此递归的构建决策树,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类. ...

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

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

  10. JavaSE开发基础--包机制&JavaDoc&Scanner&循环结构&方法&数组

    包机制 如果文件在包中需要 在文件首行添加 package 地址 package pkg1.pkg2.pkg3 import package1 JavaDoc /** * @author作者名 * @ ...