C语言拆分1-16位数字存入数组运行输出0问题求助
问题排查与修复
代码核心错误点
- 所有
for循环的终止条件写反,拆分逻辑完全不执行:- 第一层循环初始I=10,判断条件为
I>100000000000000000,10远小于1e17,循环直接跳过 - 内层J的循环、n的循环同样存在终止条件写反的问题,即使外层循环执行,内层也不会运行
- 第一层循环初始I=10,判断条件为
- 三层嵌套循环的设计逻辑错误,逐位拆分仅需单层循环即可实现,多余的嵌套会导致数组元素被重复覆盖
- 未对数组做初始化操作,未赋值的元素会输出随机垃圾值
正确实现代码
long int number; do { number = get_long("number:\n"); } while (number<1 || number>9999999999999999); int numbers[16] = {0}; // 初始化数组所有元素为0 int n = 0; long int temp = number; // 用临时变量操作避免修改原number值 // 从右到左逐位拆分 while (temp > 0 && n < 16) { numbers[n] = temp % 10; temp = temp / 10; n++; } printf("%i\n", numbers[1]);
实现说明
输入16时,第一次循环temp%10得到6存入numbers[0],temp变为1;第二次循环temp%10得到1存入numbers[1],符合你的预期需求。
内容的提问来源于stack exchange,提问作者Laughcheeta1
相关产品推荐
相关产品推荐

