Windows下system("cls")失效求助:需实现倒计时仅显示最新输出
解决Windows下C语言倒计时清屏问题
你的代码里system("cls")失效的核心原因是调用顺序错误,加上一些Windows平台的兼容性问题,下面直接给你修正方案和优化思路:
问题根源
system("cls")放在sleep(1)之后:先显示旧倒计时→等待1秒→清屏,导致你看到的是延迟1秒的内容,清屏后还会有短暂空白- 混用Linux的
sleep()函数:Windows下更推荐用<windows.h>提供的Sleep()(大写S),参数为毫秒 - printf字符串存在语法错误(换行未闭合引号)
方案一:调整清屏顺序(使用cls)
把system("cls")移到printf之前,每次循环先清屏再打印最新倒计时,同时替换为Windows原生Sleep函数:
#include <stdio.h> #include <time.h> #include <windows.h> int main() { int décompte = 120; time_t debut, maintenant; int tempsrestant; time(&debut); while (1) { time(&maintenant); tempsrestant = décompte - (maintenant - debut); if (tempsrestant <= 0) { system("cls"); printf("vous perdez une de vos trois vies\n"); Sleep(2000); break; } system("cls"); // 先清屏,再打印最新内容 printf(" tempsrestant : %d sec", tempsrestant); Sleep(1000); // Windows下休眠1秒(毫秒为单位) } return 0; }
方案二:用回车符覆盖输出(无屏幕闪烁)
如果不想每次清整个屏幕导致闪烁,可以用\r让光标回到行首,直接覆盖之前的内容,体验更流畅:
#include <stdio.h> #include <time.h> #include <windows.h> int main() { int décompte = 120; time_t debut, maintenant; int tempsrestant; time(&debut); // 先打印初始值,确保光标位置正确 printf(" tempsrestant : %d sec", décompte); while (1) { time(&maintenant); tempsrestant = décompte - (maintenant - debut); if (tempsrestant <= 0) { printf("\r vous perdez une de vos trois vies\n"); Sleep(2000); break; } // \r 让光标回到当前行开头,覆盖原有内容 printf("\r tempsrestant : %d sec", tempsrestant); Sleep(1000); } return 0; }
内容的提问来源于stack exchange,提问作者Rick Mortie
相关产品推荐
相关产品推荐

