C语言实现用户输入数字分奇偶数组输出 代码运行异常求助
问题修复方案
原代码核心错误点
- 变长数组定义顺序错误:你在变量
a未被赋值的前提下就用a定义了变长数组b[a],此时a是内存中的随机垃圾值,数组大小完全不符合预期,直接导致后续输入写入非法内存,程序行为异常。 - 第二个遍历循环逻辑完全错误:循环条件写为
i <= a且步长为i--,会导致i无限减小触发死循环,同时会出现数组下标为负的越界访问,直接触发内存错误。 - 输出逻辑结构错误:你把分类标题写在了循环内部,会导致每遍历一个元素就重复打印一次分类标题,完全不符合输出预期。
- 数字输出无分隔符:打印数值时没有空格、换行等分隔符,多个数字会连在一起无法区分。
修复后可正常运行的代码
#include <stdio.h> int main() { int a, i; // 先读取数组长度,再定义变长数组 printf("Enter a range to print the odd and even numbers-->\n"); scanf("%d", &a); int b[a]; // 读取用户输入的a个数字 for (i = 0; i < a; i++) { scanf("%d", &b[i]); } // 统一输出所有偶数 printf("The Even numbers are -->\n"); for (i = 0; i < a; i++) { if (b[i] % 2 == 0) { printf("%d ", b[i]); } } printf("\n"); // 统一输出所有奇数 printf("The Odd numbers are -->\n"); for (i = 0; i < a; i++) { if (b[i] % 2 != 0) { printf("%d ", b[i]); } } printf("\n"); return 0; }
编译运行说明
- 该代码兼容C99及以上标准,你使用的gcc可以直接通过
gcc 源文件名.c -o 程序名.exe命令编译,直接生成的exe文件即可正常运行 - 如果需要兼容更旧的C标准,可以将变长数组替换为
malloc动态内存申请的方式实现相同功能
内容的提问来源于stack exchange,提问作者Swyamdipta
相关产品推荐
相关产品推荐

