为什么C语言中do while语句判断条件用||而非&&才能正常校验正整数输入?
核心原因:你混淆了do...while循环条件的触发逻辑
do...while后接的条件规则是:条件成立时,重复执行循环体(重新要求用户输入);条件不成立时,才退出循环进入后续计算。
你写的两个判断,分别对应两种输入不合法的场景:
number < 1:输入的数值小于1,不属于正整数范畴k != number:把输入的浮点数强转为int类型后和原值不等,说明输入带小数部分,不是整数
我们需要的校验逻辑是:只要满足任意一种不合法情况,就重新输入。逻辑或||的特性是左右只要有一个表达式结果为真,整体结果就为真,刚好匹配这个需求:只要输入不符合任何一项要求,就触发重新输入的循环。
如果换成逻辑与&&,则需要同时满足两个不合法条件才会触发重新输入,会出现大量漏判:比如输入2.5,这个值不小于1,第一个条件为假,逻辑与的整体结果直接为假,循环直接退出,但2.5明显不符合正整数的输入要求,自然无法完成正常校验。
额外说明:你的代码存在一处隐含缺陷
代码中的变量i没有初始化就直接在后续求和循环里判断i <= number,会读取到随机内存值,导致求和结果异常,建议在定义时就给i赋值为1。
内容的提问来源于stack exchange,提问作者shanerig
相关产品推荐
相关产品推荐

