我正在使用一些C编码进行非常低级的实验。这不是一个实际问题,因为程序可以按照我的意愿运行,但是有人可以向我解释如何评估while循环中的以下条件吗?
我读到没有给定值的int变量等于零?那么0 + 0应该为零?但是程序无论如何都进入了while循环......
提前致谢。
#include <stdio.h>
#include <stdlib.h>
int main() {
int randomNumber1;
int randomNumber2;
int answer;
while (randomNumber1 + randomNumber2 != answer) {
randomNumber1 = (rand() % 100) + 1;
randomNumber2 = (rand() % 100) + 1;
printf("\nWhat is %i + %i= ", randomNumber1, randomNumber2);
scanf("%i,", &answer);
if (randomNumber1 + randomNumber2 == answer) {
printf("Very Good\n");
} else {
printf("Wrong answer.\n");
}
}
}
答案 0 :(得分:1)
当你没有初始化时,C中的变量(通常)没有给出值。
代码运行的原因是因为这些地址中有垃圾值。
打印出变量,你会看到。您必须在C中初始化变量。
答案 1 :(得分:1)
当你宣布整数时,他们就把垃圾价值;这是因为他们是“自动”存储类。
如果您已在主函数之外或使用static
关键字声明它们,则它们将分别为0(extern
和static
存储类。)
答案 2 :(得分:1)
如果没有显式初始化具有自动存储持续时间的对象,则其值为 不定。如果未初始化具有静态或线程存储持续时间的对象 明确地说:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正或者) 无符号)零;
- 如果是聚合,则每个成员都是 根据这些规则和任何填充初始化(递归) 被初始化为零位;
- 如果是联盟,则首先命名 成员根据这些规则初始化(递归),任何 padding初始化为零位;
<子>C.2011§6.7.9¶10子>
因此,您的函数局部变量具有不确定的值。如果变量是static
或_Thread_local
或者是全局变量(因此具有静态存储持续时间),那么它们将被初始化为零。