又双叒重名了 2021-10-06 23:29 采纳率: 100%
浏览 51
已结题

“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;了?
求指点,您的任何一句都将使我受益。
谢谢!

  • 写回答

5条回答 默认 最新

  • 关注

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 10月15日
  • 已采纳回答 10月7日
  • 创建了问题 10月6日

悬赏问题

  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
  • ¥15 Python报错怎么解决
  • ¥15 simulink如何调用DLL文件
  • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
  • ¥30 线性代数的问题,我真的忘了线代的知识了
  • ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
  • ¥188 需要修改一个工具,懂得汇编的人来。
  • ¥15 livecharts wpf piechart 属性
  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了