两个数 只要没有0,那么交集就是1 0&&0 结果0 ;0&&1 结果0 ; 1&&1 结果1
!(x+y)+z-1&&y+z/2 前边值为非0,后边也是非0,所以结果是1
C语言中,0代表false,而非0则代表true。x+y为7,!7的值为0代表false。
你这个图这么长
逻辑与 只有两边都为1才能为1
void Login()
{
Users a, b;//同理,a是用来给用户输入的,b是用来是水的(从文件中读取到b中,用b和a匹配比较)
FILE* pf = fopen("users.dat", "rb");//以只读的方式打开文件
if (!pf)//如果读取失败
{
printf("%s\n", strerror(errno));//上面有讲过~
return;
}
printf("欢迎来到登录界面!\n");
Sleep(1000);
fread(&b, sizeof(Users), 1, pf);//先从文件中读取一个用户试试水
printf("请输入账号>>");
scanf("%s", a.id);
while (1)
{
if (!strcmp(a.id, b.id))//在文件中找到了与用户输入相同的id
{
break;
}
else
{
if (!feof(pf))//没读到文件末尾,继续读取文件中的id到b中
{
fread(&b, sizeof(Users), 1, pf);//继续从文件中读取用户信息进b,直到在文件中找到一个和a的信息相同的
}
else//读到文件末尾了,没有找到与用户输入相同的账号
{
printf("此账号不存在!请重新输入!\n");
Sleep(500);
fclose(pf);
pf = NULL;
return;
}
}
}
do
{
printf("请输入密码>>");
Getpwd(a.pwd);//获取密码,在下面会讲
if (!strcmp(a.pwd, b.pwd))//输入的密码与文件中的相同
{
printf("\n登录成功!欢迎使用!\n");
Sleep(500);
fclose(pf);//用完当然要把文件关啦
pf = NULL;//置空,避免野指针
return;
}
else
{
printf("\n密码输入错误,请重新输入\n");
}
} while (strcmp(a.pwd, b.pwd));
}
大概思路就是用户先输入账号(id),接着b从文件中读取用户,直到找到与用户输入id相同的,然后就是输入密码判断密码对不对咯。 里面用到了一个库函数strcmp,判断字符串是不是一样的,如果一样则返回0,不一样则返回一个非0值。
回答:
首先,C语言中的取址符是单个&符号,不是两个&&符号,&&是用来表示逻辑“与”的。单个&符号是用来获取一个变量的内存地址的,也可以用来获取结构体成员的地址。如果想要求两个数的交集,使用&符号即可:
int intersection = a & b;
这里的&符号是按位与运算符,它会对a和b的每一位进行求与操作,最终得到的结果就是这两个数的交集。
至于7&&0的结果为什么是0,这是因为C语言中的逻辑“与”运算符&&会先判断第一个操作数的值是否为0。如果是,那么整个表达式的结果就直接是0,不需要再进行第二个操作数的求值。因为7不是0,所以表达式会继续求第二个操作数的值,而0作为第二个操作数时会被认为是假(即所有非0值都会被认为是真),所以整个表达式的值就是0。