#include <stdio.h>
int main()
{
int x;
printf("输入一个数");
scanf("%d",&x);
if(!x==0)
{
printf("x不等于0");
}
else
printf("x等于0");
return 0;
}
如果把0改成3或2,包括把printf后面的也改成3或2,然后怎么输入都无法输出x不等于0这句话,但是改成0就可以正常输入输出,这个!到底有什么用
所以是先对x取反,再跟后面的比较。
你输入非0数据,那么取反后就是0,0和0比较是相等的,那么条件就是真,执行if内语句
所以说,你这个程序本身是有问题的,按程序的意思,应该是if(X!=0)
你得if(!x==0) 如果x等于0,则这个表达式为真,加上!,取反为假,所以if条件为假
反之x不等于0,则,这个表达式为假,加上!,取反为真,if条件为真。追问
最大问题就是,如果把x后面的0如果改成别的数,为什么就无法为假呢?比如说把所有0都改成3,那么无论输入3还是2都不执行if下面的printf,为什么?
追答现在的情况是,你输入非0值,他会显示if下面的printf
如果你把所有的0改为2,则你输入除了2以外的数,会显示if下面的printf
如果你要这种效果的话就这样改
if(x!=0)
{
printf("x不等于0");
}
这里!也是“不”的意思===》"!="<==>"不等于"理解吗?
满意请采纳,谢谢!追问
最大问题就是,如果x后面的0如果改成别的数,为什么就无法为假呢?
追答你说的是那个位置?
请将该位置复制出来,
如果x等于0,!x为真,c语言里用数值1表示逻辑真;
如果x不等于0,!x为假,c语言里用数值0表示逻辑假;追问
最大问题就是,如果把x后面的0如果改成别的数,为什么就无法为假呢?比如说把所有0都改成3,那么无论输入3还是2都不执行if下面的printf,为什么?
追答!x中的!,表示逻辑非。
如果x等于0,!x为真,c语言里用数值1表示逻辑真;
如果x不等于0,!x为假,c语言里用数值0表示逻辑假;
如上所述,!x不可能等于2或者3,所以都不输出"x不等于0"这句话。
还有一点是运算符的优先级,"!x"是先算的,然后才判断"==0"
也就是说逻辑非运算符只能判断真或假,无法判断别的12345等数字?
追答逻辑非运算符,得出的结果只有0或者1。
写个程序,你运行看看,想想
#include <stdio.h>int main()
{
int x;
while(1)
{
printf("输入一个数:");
scanf("%d", &x);
printf("!%d的值为%d\n", x, !x);
if(!x == 0)
{
printf("%d不等于0\n", x);
}
else
{
printf("%d等于0\n", x);
}
printf("\n");
}
return 0;
}本回答被提问者采纳
在x不等0时,x==0表达式为假,!x==0就为真,进入if判断了!