C语言区间数字输出程序出现空输出异常求助
问题分析与修复方案
核心错误点
- scanf格式字符串错误:
scanf("%d\n%d", &a, &b);中的\n会导致程序读取第二个整数时,需额外输入换行/空白字符才能完成输入,可能引发输入异常。 - 循环变量计算偏移:循环中用
a+(i-1)表示当前数字,当i=0时会得到a-1,超出目标区间[a,b]范围,导致逻辑混乱。 - 数组索引越界:
nums数组索引为0-8,对应数字1-9,直接用(a+(i-1))作索引会让数字1对应nums[1](应为nums[0]),数字9对应nums[9](数组越界,访问非法内存)。
修复后的代码
#include <stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); // 移除多余的\n char *nums[9] = {"one","two","three","four","five","six","seven","eight","nine"}; for(int i = 0; (a + i) <= b; i++){ int current_num = a + i; // 直接计算当前遍历的区间数字 if(current_num >= 1 && current_num <=9) printf("%s\n", nums[current_num - 1]); // 数字减1匹配数组正确索引 else if (current_num % 2 == 1) { printf("odd\n"); } else { printf("even\n"); } } return 0; }
修复说明
- 移除
scanf中的\n,保证两个整数的输入逻辑正常。 - 用
current_num = a + i直接表示区间内的当前数字,避免i-1导致的偏移错误。 - 数组索引改为
current_num -1,让数字1对应nums[0]、数字9对应nums[8],彻底解决索引越界问题。
内容的提问来源于stack exchange,提问作者casimaister
相关产品推荐
相关产品推荐

