当前课程知识点:C语言程序设计(上) >  选择结构的程序设计 >  3.2 路径中的再选择——嵌套判断 >  3.2.2 用户登录检查

返回《C语言程序设计(上)》慕课在线视频课程列表

3.2.2 用户登录检查在线视频

3.2.2 用户登录检查

下一节:三个数排序_未优化.c

返回《C语言程序设计(上)》慕课在线视频列表

3.2.2 用户登录检查课程教案、知识点、字幕

接下来我们还接着讨论

路径中的再选择

也就是嵌套判断的问题

我们用一个例子

用户登陆检查

这个是现在用的最频繁的一个

无论是你进邮箱

还是你到银行去取款

还是一些其它类似的业务

你都会频繁的使用这个登陆

登陆的时候我们一般的

通常是有两个参数的

一个是系统

所谓的系统就是

对我们现在来说就是我们的程序

你到银行当然就是银行的系统

你到邮箱就是邮箱系统

这个系统一定会至少识别两个信息

一个是你的用户名

当然用户名是在不同的地方

它的长度它的设置是不一样的

其次除此之外就是密码

密码当然是你自己知道的一个信息

在我们这里边就是我们问题里

就有两个变量

一个是name用户名

一个是password

是我们的那个密码

我们对算法的考虑

为了简化起见

我们把这两个变量都考虑

考虑成整型

当一说整型你的输入就一定要注意

在整型允许的范围内

另外一个

是我们要求这系统是这样子

我成功登陆以后

你给我明确的提示

成功登陆当然没有问题了

你登陆进去了你就可以工作了

如果我不成功的时候

你最好告诉我的是

是用户名错了还是密码错了

就不要说你没成功

这时候我就不能识别

到底是用户名错还是密码错

因为有这个要求

我们的流程考虑的时候

是不是应该是这样子

这前面的判断应该

是一个什么样的判断

是一个逻辑运算的一个结果

用逻辑运算来表达的

来表达的这么一个条件

你的姓名并且密码都正确吗

应该这是一个逻辑运算的结果

作为条件

如果是的你告诉我登陆成功

我们就可以进去了进入系统

否则

一定是这两者里边有一个是错的

我不希望你这块说它们是错的

我希望你告诉我说谁错了

所以下边在这个else里边

else块里边有一个再判断

你的姓名错了吗

用户名错了吗

如果是用户名错了

这块提示用户名错

否则一定是密码错了

你提示我密码错

无论是这两个哪个错了

一定会从这两条路里选一条

这也一样你要进入这个系统

你不可能跳过这三条路里边的

所有路你不走

对这个选择来说

if块else块你必须选一个

进了else块里边还有一个选择

你必须选一个

所以这是两级的嵌套

嵌套在哪里

嵌套在else里边

这块根据这个流程我们的程序

是不是应该这样

大家看一下

在这个程序里边

在底下就做这个逻辑运算作为条件

逻辑运算

你送进来的那个name

和我们预设的这个用户名

进行等量的比较

相等吗 你送进来那个对吗

是16001吗

并且你的密码是六个1吗

这个密码其实都在这摆着

事实上就是这样程序就是这样写

写程序的人

这一块必须要知道你的密码

程序是谁写上去

大家不用担心

你不是可以修改你的密码

你写的时候是一次性写上去

谁都不知道

我们现在写程序是知道的

这一块名字你的用户名

等于你预设的这个值

你的密码也等于你预设的这个值

end这个条件才成立

登陆成功

否则走下面的这一块

我们运行一下这个程序

看一下

这个程序

我们看一下

这个程序在这

我们先不用担心这个密码

暴露不暴露

我们先看这个没有问题的话

登陆成功走了if块

否则我们要进一步的嵌套判断

判断你是用户名错了

还是密码错了 

运行一下这个程序

我们的用户名大家有没有忘记

用户名是

密码刚才是六个1

登陆成功

我们试一下

用户名错

密码给它对

这个用户名是不存在的

告诉你用户名错了

我们如果是密码错了

密码我们给

我们看一下刚才为什么不对

回过头来检查一下程序

因为我们是密码输错了

它却告诉我们还是用户名错了

我们看这一块的确是用户名错了

大家现在会不会有一个困惑

这个程序都写错了

这个编译系统怎么会通过了

我们编译的时候它没告诉错了

这就表明编译系统通过了没有问题

我现在来输入的时候

我们用户名的确是这样

我的密码也没问题

现在大家说这个系统现在告诉你

正常登陆还是没登陆

我这两个都对了

两个对了

刚才我们已经看见了成功登陆

这个程序应该没有问题

可是我们刚才做了第二次测试

我们的用户名是16001

我写成

然后密码给对

用户名错

它是用户名错

的确我把用户名给错了

这是系统查出来的吗

我们再看明明用户名错了

我们给错了

系统也告诉我错了

但是这一块却有问题

我们看一下在16001

我让用户名对

我让密码错

系统说什么

用户名不存在说用户名错

没说密码错

可是我用户名是对的

为什么回来看一下

我们发现什么

在用户名这块

我把用户名程序给写错了

应该是16

我写成14了

大家现在觉得我写错了

系统为什么会编译通过了

这个问题大家稍微想一下就应该知道

系统只能查出来什么样的错

是你的语法结构有错

比如说

你没有if却有了else

你前面有括弧后边却没括弧

这种结构

这种就说程序结构

语法结构语法有错程序结构有错

它是能查出来的

像你把这里边哪个数据给错了

它是不查的

所以这种错就非常的隐式

是因为两个都对了

它走了这条线了

你也看不到它有问题

你如果真的把用户名输错了

它也说错了

也看不到问题

只有你希望说

你期待这个结果的时候

它才会发现上边的问题

所以这就是一种隐含的错误

程序测试就是测这些错误

就是把所有的用例要测试到

我们还做一点点讨论

就这用户名这密码很危险

我们平常看这个密码

密码这样搁在程序里边

谁人都知道

我们刚才已经说到了

其实这个密码

为什么你到银行办了一个卡

银行给你预置了一个密码

然后告诉你你立刻去修改你的密码

银行预置的这个密码

工作人员是知道的

你去修改的那个密码

编程序的人会不会知道

我们想想

你的密码是

临时从你脑子里构造出来的

编程序的人自然是不知道

那个程序你的这个东西

怎么写到这个位置上

因为我们用的修改密码的这个材料

你用的那卡的材料是不同的

材料决定了

你这个密码只有你自己知道

所以大家不用担心

但是我们时常会看到有提示说

你的密码不能简单的只给四位

或者是只给六位

有些重要的东西提示你

密码要复杂

不但要有数字

还要有字母

如果从这程序里边把密码修改一下

比如说我要把密码修改成

现在已经有了十二位

十二位密码

看行还是不行

我输的没有问题里边写的也没有问题

说密码不正确

不正确吗1到9

然后再123

这不1到9再到123

为什么会不正确呢

这个不正确

我们再改改小看看

去掉两位

登陆成功

大家看我是1到9十位

不是十二位了给了十位

十位就通过了

十二位就没通过

大家一定会觉得奇怪

int型的我们前面在

讲这个类型的时候说int是十六位

而float才是

三十二位

这块的int十六位

照道理它最大的整型数是

五位数

32767负的32768

这是它的绝对值最大的是32768

怎么会到了这么多

如果有这个疑问

我们可以看一下

咱把这int到底是

十六位还是三十二位

我们看一下

我们输出一下

输出一下测试一下

我们要输出的是谁

输出的是这个函数

这个函数是来测试

这个各种类型的

各种变量的长度的

比如说你在这里边写一个变量名

它会告诉你

这个变量名里面占的位数是

几个字节它几个字节

比如说我现在写了int

它告诉我int是占了几个字节

我要写个double

它告诉我double是占了几个字节

这块它应该告诉我的是

int占了几个字节

咱把int输出来看一下

占了几个字节呢

告诉我们说

int占了四个字节

占了四个字节

我们现在说

这个咱随便输一下吧

全错了 回来

现在如果这样大家想把它改成long

行不行呢

行不行取决于说

long到底占了几个字节

按我们前面说int是两个字节

long是四个字节

这个不是绝对的

是依机器的不同

或者编译系统的不同

都会带来不同

比如说你用了一个很早的机器

这个机器说绝对一点

它是一个十六位的机器

它的整型

一定是两个字节十六位

如果你用了一个六十四位的机器

这个整型一定是

至少是三十二位

就不是十六位了

这个东西大家用不用把它背下来

不用背下来

你用的时候

你看你的系统

你用的是一个比较新的机器自然知道

它的宽度

它的整型的宽度是会要宽一些的

或者是说

当你在做程序的时候

出现了我们刚才说的那个问题

我设了一个十二位的密码

它却不认

这就是大家能够理解说

你平常设密码时候人家告诉你设几位

就是这个意思

你要设的特别长

它的系统接受不了

只要大家注意到说

你其实和机器的交互

很大程度上你是在事先做的约定

是在订购内存的

订购内存

这个内存

你的变量是多大

你只能到里面放多大的数否则会溢出

所以这块是希望大家注意的

这个我们会在讨论区里边

给大家一些问题

有兴趣的读者我们下去一起讨论

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

3.2.2 用户登录检查笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。