编写数组偶数替换为$的C程序出错,请求问题排查
问题排查与修复
核心问题分析
你的代码存在两个关键错误:
- 类型不匹配:数组
arr是int类型,将字符'$'赋值给int元素时,实际存储的是$的ASCII码值36,打印整数时自然输出36而非字符$。 - 打印格式错误:使用
%d格式符仅能输出整数,无法直接显示字符$。
修复后的通用代码
无需修改数组存储类型,在打印阶段判断处理即可,既保留原数组的数值逻辑,又能实现预期输出:
#include <stdio.h> #include <stdlib.h> int main(void) { int size, i; setbuf(stdout,NULL); printf("Enter array limit: "); scanf("%d",&size); printf("Enter values: "); int arr[size]; // 仅读取数组元素,不修改原始值 for(i=0;i<size;i++){ scanf("%d",&arr[i]); } // 打印时判断:偶数输出$,奇数输出对应数值 for(i=0;i<size;i++){ if(arr[i] % 2 == 0){ printf("$ \n"); } else { printf("%d \n", arr[i]); } } return 0; }
可选方案(修改数组存储类型)
如果一定要在数组中存储字符标记,可将数组改为char类型,但仅适用于输入为0-9的单数字场景:
#include <stdio.h> #include <stdlib.h> int main(void) { int size, i, num; setbuf(stdout,NULL); printf("Enter array limit: "); scanf("%d",&size); printf("Enter values: "); char arr[size]; for(i=0;i<size;i++){ scanf("%d",&num); if(num % 2 == 0){ arr[i] = '$'; } else { // 将奇数转为对应字符,仅支持0-9范围 arr[i] = num + '0'; } } for(i=0;i<size;i++){ printf("%c \n", arr[i]); } return 0; }
说明
第一种方案适用性更广,无需限制输入整数的范围;第二种方案仅适合输入为单个数字的场景,多位数需额外处理显示逻辑。
内容的提问来源于stack exchange,提问作者trusfrated
相关产品推荐
相关产品推荐

