为什么局部变量不匹配所有零条件?

时间:2017-08-31 22:21:28

标签: c

我正在使用一些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");
        }
    }
}

3 个答案:

答案 0 :(得分:1)

当你没有初始化时,C中的变量(通常)没有给出值。

代码运行的原因是因为这些地址中有垃圾值。

打印出变量,你会看到。您必须在C中初始化变量。

答案 1 :(得分:1)

当你宣布整数时,他们就把垃圾价值;这是因为他们是“自动”存储类。 如果您已在主函数之外或使用static关键字声明它们,则它们将分别为0(externstatic存储类。)

答案 2 :(得分:1)

  

如果没有显式初始化具有自动存储持续时间的对象,则其值为   不定。如果未初始化具有静态或线程存储持续时间的对象   明确地说:

     
      
  • 如果它有指针类型,则将其初始化为空指针;
  •   
  • 如果它有算术类型,则初始化为(正或者)   无符号)零;
  •   
  • 如果是聚合,则每个成员都是   根据这些规则和任何填充初始化(递归)   被初始化为零位;
  •   
  • 如果是联盟,则首先命名   成员根据这些规则初始化(递归),任何   padding初始化为零位;
  •   
     

<子>C.2011§6.7.9¶10

因此,您的函数局部变量具有不确定的值。如果变量是static_Thread_local或者是全局变量(因此具有静态存储持续时间),那么它们将被初始化为零。