C语言打印两整数区间数值 排查输出多出额外Result行问题
错误原因梳理
- 第一个问题:
do-while循环特性误用。do-while会优先执行一次循环体再判断条件,你输入的a=10、b=1时,第一个循环的判断条件a <= b本身不成立,但还是会先执行一次输出Result: 1,同时把b自减为0,这是第一行多余输出的来源。 - 第二个问题:边界判断错误。第一个循环执行后
b已经变成0,第二个循环的判断条件是a >= b,会让循环一直执行到a=0才停止,这就是末尾多余输出Result: 0的来源。 - 第三个问题:没有通用的大小判断逻辑,当前代码只能适配
a > b的输入场景,如果输入的a小于b,输出结果会完全错误。
修正方案
你只需要先判断两个数的大小,确定遍历的起止值,用单个循环输出即可,修正后代码如下:
#include <stdio.h> int main() { int a, b; int start, end; printf("Enter integer a:"); scanf("%d", &a); printf("Enter integer b:"); scanf("%d", &b); // 注:需求描述写的是升序输出,但给出的期望输出是从大到小的降序,此处按期望输出逻辑适配 start = a > b ? a : b; end = a < b ? a : b; while (start >= end) { printf("Result: %d\n", start); start--; } return 0; }
内容的提问来源于stack exchange,提问作者Shark tales
相关产品推荐
相关产品推荐

