【小白到大牛之路5】 交换机后台管理之权限判断

项目需求

判断用户名和密码是否正确。

项目实现

#include <stdio.h>


int main(void) {

//定义变量,用来表示用户名和密码

//char name;

char name[32];

//int password;

char password[16];

//输入用户名和密码

printf("请输入用户名:");

scanf("%s", name);

printf("请输入密码:");

scanf("%s", password);

if (strcmp(name, "admin") == 0 &&

    strcmp(password, "123456") == 0) {

//打印功能菜单

printf("---交换机后台管理---\n");

printf("1.创建账号\n");

printf("2. IP管理\n");

printf("3.退出\n");

} else {

printf("用户名或密码错误!\n");

}

return 0;

}



项目精讲

1. 字符串的比较运算

可参考c/c++手册

百度网盘链接:https://pan.baidu.com/s/1dZJLwE

使用strcmp函数

#include <string.h>

int strcmp( const char *str1, const char *str2 );


比较规则:

按顺先从前往后比较

同序号的字符按“ASCII”码值比较

直到遇到对应字符不等或者字符串结束


返回值:

str1  <  str2时, 返回值< 0(有些编译器返回 -1)

str1  >  str2时, 返回值> 0(有些编译器返回 1)


str1等于  str2时, 返回值== 0


demo

#include <stdio.h>


int main(void) {

char name[32];

int ret;

printf("请输入您的姓名:");

scanf("%s", name);

ret = strcmp(name, "Rock");

printf("ret=%d\n", ret);

return 0;

}


使用strncmp函数

#include <string.h>

int strncmp( const char *str1,  const char *str2,  size_t count );

最多比较字符串str1和str2的前count个字符。


demo

#include <stdio.h>

#include <string.h>


int main(void) {

char name1[32] = "Rock";

char name2[32];

int ret;

fgets(name2, sizeof(name2), stdin); //输入Rock

ret = strcmp(name1, name2);

printf("ret=%d\n", ret);

//

ret = strncmp(name1, name2, strlen(name1));

printf("ret=%d\n", ret);

return 0;

}


2.其他数据类型的比较运算

char, int, float, double数据的比较都使用:

大于: >    

大于或等于: >=  

小于: <

小于或等于: <=

不等于: !=      

等于: ==(注意:不是 = )


比较运算的结果:(逻辑值

结果为“真”:1

结果为“假”:0

#include <stdio.h>


int main(void) {

int a = 100;

int b = 200;

int ret;

ret = a > b;

printf("ret=%d\n", ret);   //ret=0

ret = a < b;

printf("ret=%d\n", ret);   //ret=1

return 0;

}



比较运算的使用场合:

用于“条件判断”

3. C语言的布尔类型

C语言主要标准


C89标准中的逻辑值

使用0和1表示逻辑值



demo

#include <stdio.h>


int main(void) {

int a = 100;

int b = 200;

int  ret;//或者 char ret;

ret = a > b;

if (ret) {

printf("a > b\n");

} else {

printf("a <= b\n");

}

return 0;

}


C99标准中的逻辑值(兼容C89)

使用bool类型表示逻辑类型

使用true表示真

使用false表示假


注意:需要包含头文件stdbool.h

#include <stdio.h>

#include <stdbool.h>


int main(void) {

int a = 100;

int b = 200;

//int ret;     

bool  ret;

ret = a > b;

if (ret) {  //即: if (ret == true)

printf("a > b\n");

} else {

printf("a <= b\n");

}

//true和false是"bool类型的常量"

printf("true=%d\n", true);

printf("false=%d\n", false);

return 0;

}


注意:大部分C项目使用的是C89标准中的逻辑值表示方式。


4. 逻辑运算


相当于“而且”


应用场景:

当需要两个条件都满足时,就使用逻辑与


特别注意:

条件1  &&条件2

当条件1为真时,才去判断条件2

当条件1为假时,就不再判断条件2

#include <stdio.h>


int main(void) {

int x = 0;

int a;

printf("请输入一个整数:");

scanf("%d", &a);

if ((a > 5) && ((x=100) > 90)) {

printf("OK\n");

}

printf("x=%d\n", x);

return 0;

}

逻辑或||

都为假,逻辑与才是真

只要有一个是真,逻辑与就是真


相当于“或者”


应用场景:

只需要满足任意一个条件时,就使用逻辑或


特别注意:

条件1  ||条件2

当条件1为真时,才不再判断条件2

当条件1为假时,才判断条件2

#include <stdio.h>


int main(void) {

int x = 0;

int a;

printf("请输入一个整数:");

scanf("%d", &a);

if ((a > 5) || ((x=100) > 90)) {

printf("OK\n");

}

printf("x=%d\n", x);

return 0;

}


逻辑非!



相当于“不”


应用场景:

当需要不满足某条件时,就使用逻辑或


特别注意:

逻辑非,只对一个条件进行运算!

是一种“单目运算符”

#include <stdio.h>


int main(void) {

int age;

printf("请输入您的年龄: ");

scanf("%d", &age);

//特别注意要使用()

//if ( ! age >= 30)将导致非预期结果, !会和age结合

if ( !(age >= 30) ) {

printf("您还不到30\n");

} else {

printf("您已过而立之年!\n");

}

return 0;

}


5. 其它运算操作

算术运算

+加x = 5 + 3; 

-减x = 5 - 3; 

*乘x = 5 * 3; 

/除x = 10 / 3;[if !supportLists]1. [endif]两个整数相除,结果取整数部分

[if !supportLists]2. [endif]除数不能为0(也不要为0.0)

%取余x = 10 % 3;

//结果为1

[if !supportLists]1. [endif]只有整数和char类型可以做%运算

float和double类型不能做%运算


赋值运算

x = 10;  //把x的值设置为10, 把10写到变量x中。

x = 10 + a;


左边必须是变量

“优先级”很低,只比","(逗号元素符)高。

x = (3 + 5);  //先计算"+", 再计算“=”

复合赋值运算

x += 10;    //  x = x + 10

x -= 10;    //  x = x - 10


类的还有:*= ,    /=,  %=等。

位运算

在后续章节中学习。

自增自减运算

后缀自增x = i++;x = i;

i=i+1;

先取值

再自增(自减)

后缀自减x=i--;x =i;

i=i-1;

前缀自增x = ++i;i=i+1;

x=i;

先自增(自减)

再取值

前缀自减x = --i;i=i-1;

x = i;

注意:

[if !supportLists]1. [endif]只能对变量做++和--运算,不能对变量和表达式做++和--运算

  5++;  //ERROR

(3+x)++;  //ERRO

[if !supportLists]2. [endif]建议尽量使用前缀自增(自减),以避免错误。


逗号运算符

优先级最低。


#include <stdio.h>


int main(void) {

int x;

//先计算 x = 3+5,  再计算3*5

x = 3+5, 3*5, 10/5;

printf("x=%d\n", x);  //x=8

//取最后一个表达式的值,作为整个“逗号表达式”的值

x = (3+5, 3*5, 10/5);  

printf("x=%d\n", x); //x=2

return x;

}


三目运算符

条件?表达式1 :表达式2


如果条件为真,就取表达式1作为整个表达式的值

如果条件为假,就取表达式2作为整个表达式的值


#include <stdio.h>


int main(void) {

int year;

int holiday;

printf("请输入您的工作年限: ");

scanf("%d", &year);

holiday = year > 10 ? 20 : 5;

printf("您的年假有%d天\n", holiday);

return 0;

}


[if !supportLists]6. [endif]类型转换

类型转换的概念

为什么需要“类型转换”

参与运算的两个操作数的数据类型,必须相同!


类型转换的类别:

[if !supportLists]1. [endif]隐式类型转换

自动完成转换!

[if !supportLists]1)[endif]算数转换

[if !supportLists]2)[endif]赋值转换

[if !supportLists]3)[endif]输出转换

[if !supportLists]2. [endif]强制类型转化

算数转化

(+,-,*,/,%)

char ,   int,   long,   long long,  float,  double



赋值转换

#include <stdio.h>


int main(void) {

int x;

x = 3.14 * 10;  // 31.4转换为int类型,因为赋值符号的左边变量的类型是int类型

printf("%d\n", x);

return 0;

}



输出转换

#include <stdio.h>


int main(void) {

printf("%c\n", 255+50);  //305  ->  49 ('1');

printf("%d\n", 255+50);

return 0;

}

int类型数据, 按照%f格式输出时,将得到错误的输出

float(或double) 类型数据,按照%d格式输出时,将得到错误的输出

强制类型转化

#include <stdio.h>


int main(void) {

int x = 257 + 100;

printf("%d\n", x);

x = (char)257 + 100;

printf("%d\n", x);

return 0;

}


[if !supportLists]7. [endif]运算符优先级

一共有15个级别!


不需强制记忆,只需要掌握以下常用的优先级:


最高优先级:( )和[ ]

倒数第二低优先级:赋值和复合赋值(=, +=,  -=  ...)

最低优先级:逗号表达式


!>算术运算符 > 关系运算符 > && > || > 赋值运算符


x =  ! 3 + 4 < 5 && 6 > 7 || 8 > 7;

等效于:

x =  ((!3 + 4 < 5) && (6 > 7)) || (8 > 7);


[if !supportLists]8. [endif]if条件判断语句

demo1

#include <stdio.h>


int main(void) {

int salary;

printf("请输入你的期望年薪:");

scanf("%d", &salary);

if (salary >= 200000) {

printf("你需要精通C/C++开发\n");

}

printf("OK\n");

return 0;

}


demo2

#include <stdio.h>


int main(void) {

char answer[16];

printf("你有房吗? ");

scanf("%s", answer);

if (strcmp(answer, "yes") == 0) {

printf("OK");

} else {

printf("你是一个好人!\n");

}

return 0;

}


demo3

#include <stdio.h>


int main(void) {

char answer[16];

printf("有房吗? ");

scanf("%s", answer);

if (strcmp(answer, "yes") == 0) {

printf("有房,不错\n");

} else if (printf("有车吗? ") &&

    scanf("%s", answer) &&

strcmp(answer, "yes")==0) {

printf("有车,还行\n");

} else if (printf("有病吗? ") &&

    scanf("%s", answer) &&

strcmp(answer, "no")==0) {

printf("健康就好!\n");

} else {

printf("你是一个好人!\n");

}

return 0;

}


9. 流程图


交流群:894479708


交流群:894479708

项目练习

1. 独立实现该项目。

2. 让用户输入一个成绩,然后输出这个成绩的等级。

0-59:不及格

60-79:及格

80-89:良好

90-100:优秀

其它:非法成绩

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,345评论 0 2
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,698评论 0 3
  • 项目需求 用户登录时,用户可能输入很长的用户名。 项目实现 #include int main(void) { ...
    她手心里的BUG阅读 243评论 0 0
  • 题目来源:1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目;2、C 语言面试宝典(林锐《高质量编程...
    月震阅读 1,813评论 0 1
  • C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的 算法 题目:...
    Poison_19ce阅读 1,141评论 0 0