C语言:对fgets进行封装
因为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进行封装的更多相关文章
- luajit利用ffi结合C语言实现面向对象的封装库
luajit中.利用ffi能够嵌入C.眼下luajit的最新版是2.0.4,在这之前的版本号我还不清楚这个扩展库详细怎么样,只是在2.04中,真的非常爽. 既然是嵌入C代码.那么要说让lua支持 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 模块的封装之C语言类的封装
[微知识]模块的封装(一):C语言类的封装 是的,你没有看错,我们要讨论的是C语言而不是C++语言中类的封装.在展开知识点之前,我首先要 重申两点: 1.面向对象是一种思想,基本与所用的语言是无关的. ...
- Java语言简介、基础组成、封装、继承、多态、抽象类、内部类、接口
目录 Java简介 Java语言基础组成 面向对象 对象 封装 构造函数 this关键字 static(静态关键字) 主函数 静态什么时候用呢? 面向对象(数组工具对象建立) 设计模式 继承 成员变量 ...
- 解析大型.NET ERP系统 多国语言实现
实现多国语言有许多种实现方案,无外乎是一种字符串替换技术,将界面控件的文本标签替换成相应语言的文字..NET Windows Forms实现多国语言的方法有以下几种: 1 .NET的方案,使用资源文件 ...
- 【转】浅思OC的语言特性
算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...
- c#重点[封装,继承,多肽]
面向对象的语言三大特点:封装.继承.多态 Ⅰ.封装:是把类的内部隐藏起来,以防止外部世界看见的一个面向对象的概念,通过关键字去控制变量,方法的访问权限. 1).访问修饰符: Ⅱ.继承: eg:我们建一 ...
- 基础学习day05---面向对象一类,对象、封装
一.面向对象 1.1.面向对象的概念 很经典的一句话----------万物皆对象 定义:面向对象一相对面向过程而言的 面向对象和面向过程都是一种思想 面向过程-- ...
- C语言的一点操作(学习笔记)
#include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...
- 浅思OC的语言特性
算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...
随机推荐
- #矩阵乘法#洛谷 3702 [SDOI2017]序列计数
题目链接 分析 考虑容斥,用总方案减去全是合数的方案数, 可以发现 \(n\) 很大,\(p\) 很小,直接用矩阵乘法转移即可 代码 #include <cstdio> #include ...
- #斐波那契#洛谷 3424 [POI2005] SUM-Fibonacci Sums
题目 已知\(x,y\)的斐波那契表示,求\(x+y\)的斐波那契表示 分析 显然得到两条性质: \(f_{i+1}=f_{i-1}+f_i\) \(2f_i=f_{i+1}+f_{i-2}\) 那么 ...
- OpenHarmony Meetup 2023北京站圆满举办
"OpenHarmony正当时"OpenHarmony Meetup 2023城市巡回活动,旨在通过meetup线下交流形式,解读OpenHarmony作为下一代智能终端操作系 ...
- 学会在 C++ 中使用变量:从定义到实践
C++ 变量 变量是用于存储数据值的容器. 在 C++ 中,有不同类型的变量(使用不同的关键字定义),例如: int - 存储整数(没有小数点),例如 123 或 -123 double - 存储浮点 ...
- 第二十一篇:信号、缓存、中间件、Form操作
一.CSRF 二.中间件 三.缓存 四.信号 五.Form操作
- Vim 安装与基础操作指南
0x00 链接 Vim 官网 Vim GitHub Vim 中文文档 0x01 准备 (1)下载与安装 在官网地址找到 Download 标签,在其中根据操作系统选择相应的版本,以下以 Windows ...
- CentOS 安装openssh-6.XX
安装openssh-6.0p1 1.安装依赖包 有遇到 报ZLIB有问题的,要安装以下包 rpm -ivh zlib-devel-1.2.3-3.* rpm -ivh libsepol-devel-1 ...
- mysql 必知必会整理—sql 计算函数[六]
前言 简单整理一下sql的计算函数. 正文 函数没有SQL的可移植性强 能运行在多个系统上的代码称为可移植的(portable).相对来说,多数SQL语句是可移植的,在SQL实现之间有差异时,这些差异 ...
- Java入门01:环境安装与配置
Java入门01:环境安装与配置 JDK下载 下载地址:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads ...
- 第11課-Channel Study For Create Custom Restful Service
这节课我们一起学习利用Mirth Connect的HTTP Listener源通道与JavaScript Writer目的通道搭建自定义Restful风格webapi服务. 1.新建名为'Custom ...