if(!a)

f() ……;
是逻辑判断语句,如果括号内逻辑值为真,则继续执行下一条语句,否则不执行

计算机默认以“0”代表逻辑假,以“非0值”代表逻辑真

上述程序的意思就是不断从键盘向a赋值,直到赋给a的值为一个非0数 若a非0,则逻辑值为真,
“!”表示取反,!a的逻辑值就为假,不执行下一条语句;

从逻辑值的角度考虑: if(a)等价于if(a!=0)

if(!a)等价于if(a==0)  if(!a) 等价于 if(a == FALSE)

C语言中的非零即真,也就是a除非等于0 即a==0时为假以外,无论a等于什么都等价于  a==1。

那么!a真好相反,只有当a==0时为真,其他的无论a等于什么都是假

if(a)  {

                    }            //a==0时  , 跳过语句

                                                       //每次从键盘 输入的值a!=0,无论a等于什么,都执行

if(!a) {  

                         }  //!a  !=0    a=true   跳过语句

                              // a==0                  执行

原文地址:https://www.cnblogs.com/2014acm/p/3888712.html