C语言为什么写出来的2分钟倒计时,分钟最后成负数了


int a,b;
a=2;
b=60;
while (a>=0 || b>=0)
{
Sleep ("cls");
printfe ("%d:%d",a,b);
Sleep (1000);
a=a-1;
b=b-1;
}

问题出来哪里了😂

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这是因为在你的代码中,当 a 变为 0 时,循环依然会执行一次,导致 b 减为负数。可以使用 && 替代 || 来解决这个问题,同时还需要考虑 b 的进位问题。

以下是修改后的代码:

int a, b;
a = 2;
b = 0;
while (a >= 0 && b >= 0) {
    system("cls");
    printf("%d:%02d", a, b); // 保证输出两位数,不足补0
    Sleep(1000);
    b--;
    if (b < 0) {
        b = 59;
        a--;
    }
}


这里使用 %02d 来保证输出的分钟数占两位,不足补零。另外,使用 system("cls") 来清空屏幕,而不是 Sleep("cls")。

每次循环a,b都减1,两者都小于零时,结束循环,a比b小,因此b等住于零是结束循环,此时a等于-58。你应该先a减1,再循环b小于零时,a再减1,b改成60继续循环,都小于零时结束。