C语言存储用户输入整数并实现已存值遍历的方法
问题定位
strlen()仅适用于以'\0'为终止标记的字符型字符串,入参类型要求为char*,无法直接用于int类型数组的长度计算:int数组没有原生的字符串终止规则,哪怕数组初始化全为0,也会因为用户可能输入合法的0值,导致遍历提前中断,完全不符合预期。- 原打印逻辑存在类型匹配错误:直接将数组首地址
storedinputs作为%d格式的打印参数,没有按下标逐个读取数组存储的整数值,输出结果完全错误。 - 遍历边界选择错误:每轮循环里用户刚完成第
i+1个整数的输入,此时已录入的有效元素总数就是i+1,完全不需要额外调用库函数计算长度,直接以当前已录入计数作为循环边界即可。
修正后可实现预期效果的代码
#include <stdio.h> int main(void) { int storedinputs[10] = {0}; int input; for(int i = 0; i < 10; i++) { printf("\nPlayer input:"); scanf("%d", &input); storedinputs[i] = input; // 遍历当前所有已录入的元素 printf("Inputs: "); for(int s = 0; s <= i; s++) { printf("%d ", storedinputs[s]); } } return 0; }
关于"参照strlen逻辑遍历整数数组"的实现说明
如果你确实想复刻字符串依靠终止标记判断遍历长度的strlen逻辑,需要手动约定一个不会和用户输入值冲突的特殊整数作为数组终止标记(比如选取超出用户输入范围的固定值如
-32768作为终止符),再自己实现计数函数,碰到这个标记就停止遍历,本质和strlen的实现逻辑一致:
// 自定义int数组长度计算函数,和strlen的遍历逻辑对齐 int custom_int_arrlen(int *arr, int stop_mark) { int len = 0; while(arr[len] != stop_mark) { len++; } return len; }
这种实现方式需要严格约束用户的输入范围才能正常工作,可靠性远不如直接记录已录入元素数量的方式,实际场景中不推荐使用。
内容的提问来源于stack exchange,提问作者ege Selcuk
相关产品推荐
相关产品推荐

