Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用#include<;stdbool.h>;在C中_C_Arrays_Debugging_Netbeans_Boolean - Fatal编程技术网

使用#include<;stdbool.h>;在C中

使用#include<;stdbool.h>;在C中,c,arrays,debugging,netbeans,boolean,C,Arrays,Debugging,Netbeans,Boolean,我不知道为什么会这样。有人遇到过这种情况吗?我正在使用Netbeans 8.2,该程序正在调试模式下运行 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define N 100 int main() { //all lockers are closed bool lockers[N + 1] = {false}; return 0; } #包括 #包括

我不知道为什么会这样。有人遇到过这种情况吗?我正在使用Netbeans 8.2,该程序正在调试模式下运行

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

#define N 100

int main() {
    //all lockers are closed
    bool lockers[N + 1] = {false};

    return 0;
} 
#包括
#包括
#包括
#定义N 100
int main(){
//所有储物柜都关上了
布尔储物柜[N+1]={false};
返回0;
} 


正如您所看到的,Netbeans表示,有些索引包含看起来像int值的内容,而当我将所有值声明为false时,突出显示的那个索引甚至是true

布尔值是一种算术类型,因此,当您在初始化器中没有提供显式值时,应将其初始化为静态值

这在(例如)
C116.7.9初始化中有详细说明(解释):

21/如果括号内列表中的初始值设定项少于骨料的元素或构件,则骨料的剩余部分应为 与具有静态存储持续时间的对象隐式初始化相同

10/如果没有显式初始化具有静态或线程存储持续时间的对象,并且如果该对象具有算术类型,则将其初始化为(正或无符号)零

在正确检查方面,对代码进行临时更改,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 100

int main() {
    //all lockers are closed
    bool lockers[N + 1]= {false};

    for (int i = 0; i <= N; ++i)
        if (lockers[i])
            printf("%d is the wrong value\n", i);

    return 0;
}
#包括
#包括
#包括
#定义N 100
int main(){
//所有储物柜都关上了
布尔储物柜[N+1]={false};

对于(int i=0;请不要让代码仅在图像中可用。请将其包含在问题中。尽可能避免调试器图像。调试器显示伪值时的当前行是哪一行?可能是在执行初始化之前,因此内容不确定吗?在到达
返回0;
之前
储物柜中的值不是真正确定的。另外,请向我们展示完整的代码,而不是它的一部分。什么是
N
?为什么有
numberOfStudents
?啊,这是正确的。程序没有完成将每个元素的值设置为false,因为它没有返回0;也许您只是在行
bool lockers[N+1]={false}之前的e调试器
甚至已经被执行…无论如何,没有人能够用给出的信息重现问题。如果是这样,要么是NetBeans调试器错误,要么是您在这里晚了一点才使用它,但第三种可能是初始化被优化了,因为原始代码中的
储物柜
数组是never accessed。@Andrew,这是一个很好的观点,至少对原始代码来说是这样,因为很可能是遵循了“好像”规则,而编译器发现它没有被使用。