“0”与“假”的区别?

纯小白,想编个阶乘,却无法停止循环。
以下为编程内容
#include
using namespace std;
int main( )
{
int n;
while(cin>>n){
int a=1;
for(int i=1;i<=n;i++){
a*=i;
}
cout<<a<<endl;
}
return 0;
}
我想,当输入n为0时,是否能表示假,然后结束循环呢?我试了一下,输入0后并没有结束,而是输出了1,并可以继续输入,这是为什么呢?是我没有理解while么?还是其他问题?如果我要停止循环,只能加个if(n==0) break;了?
求指点,您的任何一句都将使我受益。
谢谢!

cin>>n的返回值不是读取的n的值。

cin>>n返回的也是一个cin对象,当一个cin对象作为条件选择、循环等的控制表达式时,编译器会将其转换为真值表达式,如果cin的iostate为goodbit,则这个真值表达式的结果为真,否则为假。

输入一个非数字可以置位failbit,从而结束循环,当然这是一个非正常退出。

正常退出可以用键盘模拟产生EOF,表示流输入结束了。在windows中可以输入ctrl+z,unix/linux中则为ctrl+d。

你可以通过读取后判断n来决定是否结束输入
cin>>n这个语句只有当读取到EOF时才返回假,你可以通过输入ctrl+D来输入EOF
如果要让循环在输入0时退出:
比如在while(cin>>n)内加入if(!n)break;这种结构来打断while,或者在while条件内对n做判断,把输入移到while代码块内
有帮助望采纳~

有整数输入都是真

cin>>n这里只要输入正确,返回值都是1,所以不可能通过cin >>n来结束循环,可以判断输入的数是否为负数来结束循环:
while(cin >>n)
{
if(n<0) break;
//其他代码
}


#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    do{
        int a=1;
        for(int i=1;i<=n;i++){
            a*=i;
            n--;
        }
        cout << a << endl;
        cin >> n;
    }while (n);
    return 0;
}

这样可以实现一样的功能
cin是istream&对象,调用它返回的是它本身(非0值)当遇到EOF时返回0,这将作为while的判断条件,但这不是我们想要的,要实现输入0停止循环,就要把n作为条件