while循环中的判断条件,该怎么解决

while循环中的判断条件
char choice[20];
while(gets(choice) != NULL && choice[0] != '\0')

上面的代码是我在《C Primer Plus》中看到的,while循环中能否只保留gets(choice) != NULL   或是   choice[0] != '\0', 这两个判断之间有什么区别吗?

------解决方案--------------------
前一个是保证choice有确实取到字符,后一个是保证choice不是空串。
------解决方案--------------------
去掉gets的话你的choice怎么获得数据来源,第二个条件应该是防止是个空串
------解决方案--------------------
引用:
引用:前一个是保证choice有确实取到字符,后一个是保证choice不是空串。怎样的输入才算是空串呢?是不是点空格键,然后点回车键输入的就是空串?
直接按下回车
------解决方案--------------------
引用:
引用:不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}
因为前两种写法在语言表达意思的层面上有二义性……

别被误导了 赵 提到的情况根本不能相提并论 代码的意思完全不一样
while (exp && exp && exp)
{
    //TODO
}

的意思 应该是
while(1)
{
    if(!exp)
        break;
    if(!exp)
        break;
    if(!exp)
        break;
    //TODO
}

上面的情况 写成 
while(exp && exp && exp)完全正常的做法

while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}这样根本是两回事