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

C语言指针问题:猜数字游戏输出所有猜测值均为0

问题分析与修复

核心问题出在打印猜测记录的循环中:你使用了p[arr_size]作为访问下标,而arr_size是数组的总长度,数组的合法下标范围是0到arr_size-1。p[arr_size]指向的是数组末尾之外的未初始化内存,所以输出的是随机值(这里显示为0)。

修复步骤

1. 修正打印循环的下标

把打印循环里的p[arr_size]改为p[i],同时优化输出格式避免末尾多余的逗号:

printf("Your Tries: ");
for(int i = 0; i < arr_size; i ++){
    printf("%d", p[i]);
    if(i != arr_size - 1){
        printf(", ");
    }
}
printf("\n");

2. 调整-1输入的判断位置

当前代码会把-1也存入数组,但输入-1是用户主动放弃,不应算作有效尝试。需要把guess == -1的判断移到存储猜测值之前:

while(1){
    int guess;
    scanf("%d", &guess);
    
    if(guess == -1){
        printf("You input wrong number\nYou lose. The Number is %d\n", n);
        break;
    }
    
    arr_size ++; 
    p = realloc(p, sizeof(int) * arr_size);
    p[arr_size-1] = guess;
    
    // 后续的大小判断逻辑...
}

3. 优化初始内存分配

初始时arr_size为0,直接用NULL初始化指针更规范,因为realloc(NULL, size)等价于malloc(size):

int *p = NULL; // 替代原来的malloc(sizeof(int)*arr_size)

4. 释放内存避免泄漏

程序结束前记得释放分配的内存:

free(p);
return 0;

完整修正后的代码

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

int arr_size = 0;

int main()
{
    srand(2022);
    int n = (rand() % 100) + 1; 
    int *p = NULL;
    
    while(1){
        int guess;
        scanf("%d", &guess);
        
        if(guess == -1){
            printf("You input wrong number\nYou lose. The Number is %d\n", n);
            break;
        }
        
        arr_size ++; 
        p = realloc(p, sizeof(int) * arr_size);
        p[arr_size-1] = guess;
        
        if(n > guess){
            printf("The Number is greater than %d\n", guess);
        }else if(n < guess){
            printf("The Number is less than %d\n", guess);
        }else{
            printf("You win. The Number is %d\n", guess);
            break;
        }
    }
    
    printf("Your Tries: ");
    for(int i = 0; i < arr_size; i ++){
        printf("%d", p[i]);
        if(i != arr_size - 1){
            printf(", ");
        }
    }
    printf("\n");
    
    free(p);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:55:20