为什么在单行上声明变量会产生意想不到的结果?

0 c

我编写了一个简单的时钟,发现虽然小时和秒都可以,但如果我在一行上声明变量,分钟就不行了(分钟从 16 开始,而不是像预期的那样从 0 开始)。

如果我在单独的行上声明变量,问题就解决了。我还是很好奇,有人知道为什么吗?

这是代码:

#include <stdio.h>
#include <windows.h>
//h=hours, m=minutes, s=seconds.
int main(){
    int h, m, s = 0; //THIS IS THE LINE: WHY "m" STARTS AT 16 AND NOT 0?
    int delay = 1000;
    while(1){
        s++;
        if(s>59){
            m++;
            s=0;
        }
        if(m>59){
            h++;
            m=0;
        }
        if(h>12){
            h=1;
        }
        printf("\n %02d:%02d:%02d", h, m, s);
        Sleep(delay);
        system("cls");
    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ein 6

您的变量未初始化- 它们可以采用任何值,并且在初始化之前使用它们(通常)是不确定的行为。

一行代码如:

int h, m, s = 0;
Run Code Online (Sandbox Code Playgroud)

并没有将每个变量定义为零——仅定义第三个变量。它相当于:

int h;
int m;
int s = 0;
Run Code Online (Sandbox Code Playgroud)

要修复此问题,请将所有变量初始化为零:

int h = 0, m = 0, s = 0;
Run Code Online (Sandbox Code Playgroud)