为何我的C语言程序输出随机值?代码问题排查求助
C语言数字输入收集问题修复
问题分析
你的代码目标是收集6个有效数字,若首次输入不足则补充输入,但当前存在以下核心问题导致输出异常:
1. 数组未初始化产生随机值
首次遍历输入时,遇到非数字/空格字符会直接跳过当前answer[i]的赋值,这些未被赋值的数组位置会保留内存中的随机垃圾值。
2. 第二次输入的赋值逻辑错误
第二次输入处理时,直接以answer[i + count]的方式赋值:
- 会覆盖首次输入中已填充的有效数字(比如案例1中首次输入的3、4被第二次输入的5、6覆盖)
- 当
i + count >=6时,会出现数组越界访问,触发未定义行为
3. 有效数字提取逻辑受限
仅检查输入字符串的前6个字符,无法完整提取输入中的所有有效数字(比如输入含非数字字符时,后面的有效数字会被忽略)
修正后的代码
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { int answer[6]; char input[100]; int digit_count = 0; // 已收集的有效数字数量 // 第一次输入处理:提取所有有效数字 fgets(input, sizeof(input), stdin); for (int i = 0; input[i] != '\0' && digit_count < 6; i++) { if (isdigit(input[i])) { answer[digit_count++] = input[i] - '0'; } } // 若有效数字不足6个,提示补充输入 while (digit_count < 6) { printf("您需要再输入 %d 位数字以完成猜测\n", 6 - digit_count); fgets(input, sizeof(input), stdin); // 从补充输入中提取有效数字,填充到answer数组 for (int i = 0; input[i] != '\0' && digit_count < 6; i++) { if (isdigit(input[i])) { answer[digit_count++] = input[i] - '0'; } } } // 打印结果 for (int i = 0; i < 6; i++) { printf("%d ", answer[i]); } printf("\n"); return 0; }
修正说明
- 有效数字提取逻辑:遍历输入字符串的所有字符,只要是数字就收集到
answer数组,直到凑够6个,不再限制只看前6个字符。 - 数组赋值顺序:用
digit_count记录已收集的数字数量,每次提取到有效数字时,填充到answer[digit_count++],确保不会跳过或覆盖已有值。 - 循环补充输入:用
while循环确保直到收集满6个数字才停止,即使补充输入中仍含非数字字符,也能自动提取有效部分。
测试案例验证:
- 案例1:首次输入
1234,提取4个数字;第二次输入56,提取2个数字,最终输出1 2 3 4 5 6 - 案例2:首次输入
12,提取2个数字;第二次输入3456,提取4个数字,最终输出1 2 3 4 5 6
内容的提问来源于stack exchange,提问作者Eason Hao
相关产品推荐
相关产品推荐

