C语言逻辑运算符: && 和 ||
1. 简单介绍 && 和 ||
&& 和 || 是逻辑运算符,分别是逻辑与(&&)和逻辑或(||)
1) && (逻辑与):(三种)
① 当逻辑与左边为false(假),则不再进行逻辑与右边的判断,结果为false(假)
② 当逻辑与左边为true(真)则进行右边判断,右边为false(假),结果为false(假)
③ 当逻辑与左边为true(真)则进行右边判断,右边也为true(真),则结果为true(真)
2) || (逻辑或):(三种)
① 当逻辑或左边为false(假),继续逻辑或右边的判断,如果也为false(假),结果为false(假)
② 当逻辑或左边为false(假),继续逻辑或右边的判断,如果为true(真),结果为true(真)
③ 当逻辑或左边为true(真),则不再进行逻辑或右边的判断,结果为true(真)
2. && 和 || 的使用
1) && (逻辑与)
下面通过一个程序进行讲解:
#include <stdio.h>
#include <string.h> // strcmp所在头文件
int main(void)
{
char szAccount[] = "account"; // 设置的默认账号
char szPassword[] = "password"; // 设置的默认密码
char szInputAccount[32] = { 0 }; // 输入的账号
char szInputPassword[32] = { 0 }; // 输入的密码
// 获取输入的账号
printf("请输入账号: ");
scanf_s("%s", szInputAccount, 32);
// 获取输入的密码
printf("请输入密码: ");
scanf_s("%s", szInputPassword, 32);
// 通过strcmp函数进行比较输入的账号和密码是否跟我们设置的匹配
// 通过 &&(逻辑与) 进行判断,当账号和密码都正确才会打印出 "账号密码正确!"
if (strcmp(szInputAccount, szAccount) == 0 &&
strcmp(szInputPassword, szPassword) == 0) {
printf("账号密码正确!");
}
else {
printf("账号或密码错误!");
}
return 0;
}
简单简介上面的程序:
定义了一个char(字符型)的数组变量szAccount,并且初始化为 "account"
定义了一个char(字符型)的数组变量szPassword,并且初始化为 "password"
定义了一个char(字符型)的数组变量szInputAccount,并将数组中的每个元素都初始化为0
定义了一个char(字符型)的数组变量szInputPassword,并将数组中的每个元素都初始化为0
printf 打印一条提示信息,提示用户输入账号
scanf_s 获取用户输入的数据,然后保存到对应的变量中,此处为szInputAccount
printf 打印一条提示用户输入密码
scanf_s 获取用户输入的数据,然后保存到对应的变量中,此处为szInputPassword
strcmp函数是比较两个传入的字符串,如果两个字符串是相同的则返回0(strcmp百度百科)
然后通过 &&(逻辑与)进行比较输入的账号和密码与默认设置的账号和密码比较,如果都相同则打印 "账号密码正确!",如果有其中一个不正确则打印 "账号或密码错误!"
2) || (逻辑或)
#include <stdio.h>
int main(void)
{
char c;
char c1;
do {
/**
* 进行输入账号和密码的操作和判断
**/
// 此处只是为了清空输入缓冲区
while ((c1 = getchar()) != EOF && c1 != '\n') {}
// 密码错误进行是否继续输入进行匹配
printf("是否继续匹配,继续匹配请输入(y或者Y)\n");
c = getchar();
} while ('y' == c || 'Y' == c);
return 0;
}
简单讲解上面程序:
定义了一个char(字符型)变量c
定义了一个char(字符型)变量c1
do...while循环不断进行账号密码的判断操作
while循环是为了清空输入缓冲区,因为不清空输入缓冲区的内容,下面的getchar就会获取不确定的内容
最后通过||(逻辑或)判断是否继续输入,如果输入的是 'y' 或者 'Y' 都将继续进行循环输入匹配