You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写数组偶数替换为$的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:40:23