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

C语言while循环多条件使用时answer值异常变更问题求助

问题分析与修复

1. 数组越界导致answer被意外修改

你代码里的while循环初始条件有严重问题:第一次进入循环时i=0,guess[i-1]就是guess[-1]——C语言不允许数组下标为负数,这属于数组越界访问,会触发未定义行为。

这种情况下,程序会读写数组内存范围之外的区域,刚好你的answer变量的内存位置可能和这个越界地址重叠,所以就被意外改成了guess里的值,这就是你看到answer莫名变化的原因。

2. if判断误用赋值运算符而非比较运算符

最后判断对错的if(guess[i-1] = answer)是错误的:=是赋值符号,不是比较符号。这行代码会把answer的值赋给guess[i-1],然后因为赋值结果非零,永远会执行“答对了”的分支,完全起不到判断对错的作用,必须改成==。

修复后的完整代码

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

int main(){
    int answer = 10;
    int guess[3]; // 3次猜测机会,数组开3个位置才够
    int i = 0;
    int remainingGuesses = 3; // 修正拼写错误:remaning -> remaining

    // 重新设计循环逻辑:先输入再判断,彻底避免越界问题
    while(remainingGuesses > 0){
        printf("Remaining guesses %d. Enter a number: ", remainingGuesses);
        scanf("%d", &guess[i]);

        // 输入后直接检查是否猜对,猜对就跳出循环
        if(guess[i] == answer){
            break;
        }

        i++;
        remainingGuesses--;
    }

    printf("Total attempts: %d\n", i+1);
    printf("Your last guess: %d\n", guess[i]);
    printf("Correct answer: %d\n", answer);     
    
    if(guess[i] == answer){
        printf("Your answer is right!\n");
    }else{
        printf("Your answer is wrong!\n");
    }
    return 0;
}

额外优化说明

  • 原数组大小为2,但你设置了3次猜测机会,第三次输入时会再次越界,所以调整为3
  • 循环逻辑改为先输入再判断,彻底规避了第一次循环就访问guess[-1]的无效内存问题
  • 修正了变量名的拼写错误,提升代码可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:24:12