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
相关产品推荐
相关产品推荐

