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

为何C语言自定义布尔函数的返回结果在main函数中无法正确识别

问题根因

你的代码存在两处核心问题:

  • 变量作用域错误:accessCheck函数内,if分支中重新声明了一个同名局部变量access,该变量仅在if代码块内生效,函数外层定义的access变量从未被修改,导致函数永远返回0。
  • 无效冗余调用:main函数中第一次accessCheck(code)调用未接收返回值,属于无意义的冗余代码,不影响运行结果但可删除。
修复方案

仅需要修改accessCheck函数的if分支逻辑,不要重复声明变量,直接修改外层access的值即可,修复后的完整代码如下:

#include <stdio.h>
#include <stdbool.h>

bool accessCheck(int);

const int pin = 1234;

int main(){
    int code;
    printf("Hi, please enter your password:");
    scanf("%d", &code);
    
    if(accessCheck(code) == 1){
        printf("Password recognized.");
    }
    else {
        printf("Password unrecognized.");
    }
    return 0;   
}

bool accessCheck(int x){
    bool access = 0;
    if(x == pin){
        // 去掉重复的bool声明,直接修改外层变量的值
        access = 1;
    }
    return access;
}
补充说明

C语言中相同作用域内不能重复声明同名变量,但不同层级的作用域可以声明同名变量,内层变量会屏蔽外层变量,你之前的写法刚好触发了这个特性,导致赋值逻辑没有生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:45:00