为何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
相关产品推荐
相关产品推荐

