C语言问题,帮助一下

img


这个!是怎么回事,难道!7是0?,有没有人知道,两个取址符是求交集是吧,但是两个数怎么求交集啊

两个数 只要没有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

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7777535
  • 这篇博客也不错, 你可以看下C语言:读取文件中若干个身份证号,根据校验码判断身份证的有效性,输出非法身份证。
  • 除此之外, 这篇博客: C语言实现可写入文件的账号密码登录系统,密码输入时掩盖,登录界面菜单选择,更改密码系统,课设必备。中的 4.登录系统 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    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值。

  • 您还可以看一下 黄强老师的30分钟彻底学会C语言指针视频教程课程中的 结构体类型的指针小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    回答:

    首先,C语言中的取址符是单个&符号,不是两个&&符号,&&是用来表示逻辑“与”的。单个&符号是用来获取一个变量的内存地址的,也可以用来获取结构体成员的地址。如果想要求两个数的交集,使用&符号即可:

    int intersection = a & b;
    

    这里的&符号是按位与运算符,它会对a和b的每一位进行求与操作,最终得到的结果就是这两个数的交集。

    至于7&&0的结果为什么是0,这是因为C语言中的逻辑“与”运算符&&会先判断第一个操作数的值是否为0。如果是,那么整个表达式的结果就直接是0,不需要再进行第二个操作数的求值。因为7不是0,所以表达式会继续求第二个操作数的值,而0作为第二个操作数时会被认为是假(即所有非0值都会被认为是真),所以整个表达式的值就是0。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^