C语言如何正确设置do-while循环条件:提取数值前两位报错排查
问题原因及解决方法
问题原因
代码的核心问题是循环终止条件设置错误:
当前while (card_number > 2)的逻辑是只要card_number的数值大于2,就会持续执行除以10的操作。哪怕数值已经缩减到你想要的两位数(比如45),因为45>2依然成立,循环会继续执行,最终会一直除到结果小于等于2才停止,所以输出结果大概率为0。
另外你选用的do-while循环存在额外风险:do-while会先执行一次循环体再做条件判断,如果输入的数值本身就是两位数,会先被除以10变成个位数,即便后续条件改对也会得到错误结果。
解决方法
你需要的终止条件是当card_number小于100时停止循环,此时剩下的数值正好是原数的前两位,更推荐使用先判断后执行的while循环,适配所有>=10的输入:
while (card_number >= 100) { card_number = card_number / 10; }
补充注意事项:
- 如果输入的
card_number本身位数不足2位,会直接返回原数,你可以根据作业需求额外增加位数校验逻辑,避免不符合要求的输入导致结果出错。 card_number需要定义为整数类型(如long/long long),如果用浮点类型会出现精度丢失问题。
内容的提问来源于stack exchange,提问作者jelaxo
相关产品推荐
相关产品推荐

