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

C语言如何打印用户输入数组对应索引 现有代码问题排查

现有代码存在的问题
  • 未实现提示的「输入-1终止输入」逻辑:当前for循环固定读取20个double值,未对输入值做-1判断,无法提前终止输入。
  • 未实现索引与值的并排展示:输出逻辑仅打印数组元素值,未输出对应索引,也没有做类表格的对齐排版。
  • 存在数组越界错误:sizeof(sentinel[20])访问了数组下标为20的元素,而sentinel数组长度为20,合法下标范围是0~19,属于越界访问,同时该写法无法获取数组长度,仅会返回double类型的字节长度。
  • 声明的arr_1函数未被调用,也没有实现对应业务逻辑,属于无效代码。
  • 未做输入合法性校验:如果用户输入非数字内容,scanf调用会失败,数组存储的会是未初始化的垃圾值。
功能实现代码

你要的功能可以参考如下实现:

#include <stdio.h>

// 打印数组索引与对应值的函数
void print_arr_with_index(double ar[], int size) {
    // 打印类表格表头
    printf("+-------+---------------------+\n");
    printf("| 索引  | 输入值              |\n");
    printf("+-------+---------------------+\n");
    for (int i = 0; i < size; i++) {
        printf("| %-5d | %-19lf |\n", i, ar[i]);
    }
    printf("+-------+---------------------+\n");
}

int main()
{
    double sentinel[20];
    int actual_size = 0;
    const double END_FLAG = -1.0;

    printf("Hello User!\n\nEnter up to 20 values, and type -1 when you are finished: \n");

    for (int i = 0; i < 20; ++i) {
        int ret = scanf("%lf", &sentinel[i]);
        // 输入非法或者输入了终止标记就跳出循环
        if (ret != 1 || sentinel[i] == END_FLAG) {
            break;
        }
        actual_size++;
    }

    // 调用函数打印索引和值的类表格
    print_arr_with_index(sentinel, actual_size);

    return 0;
}

实现说明

  • 输入时每次校验scanf的返回值判断输入是否合法,同时判断输入值是否为终止标记-1,满足条件就终止输入,记录实际输入的元素个数
  • 打印时用格式化字符串做对齐,用分隔线做成类表格效果,同时输出索引和对应的输入值
  • 移除了原代码中无效的函数声明和越界访问代码

内容的提问来源于stack exchange,提问作者neelish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:02