Windows下CLion中C语言clrscr()及system("cls")失效问题求助
解决CLion中Windows下清屏失效的问题
失效原因分析
clrscr()是Turbo C等老式DOS编译器专属函数,属于非标准头文件conio.h,现代编译器(CLion默认使用的MinGW/MSVC等)并不支持该头文件,因此无法调用是正常现象。system("cls")仅回显命令而不清屏,是因为CLion默认使用**伪终端(PTY)**而非原生Windows命令行窗口,cls命令在PTY环境下无法触发清屏逻辑,只会输出命令本身。
可行解决方案
方案1:切换CLion终端为原生CMD/PowerShell
- 打开CLion,进入
File > Settings > Tools > Terminal - 在
Shell path选项中,将默认shell替换为:- CMD:
cmd.exe - PowerShell:
powershell.exe
- CMD:
- 重启CLion终端,之后调用
system("cls")即可正常清屏。
方案2:调用Windows系统API清屏(推荐,无环境依赖)
直接使用Windows标准控制台API实现清屏,不依赖终端类型,代码示例:
#include <windows.h> void clearScreen() { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hConsole, &csbi); DWORD dwConSize = csbi.dwSize.X * csbi.dwSize.Y; COORD upperLeft = {0, 0}; DWORD dwCharsWritten; FillConsoleOutputCharacter(hConsole, ' ', dwConSize, upperLeft, &dwCharsWritten); FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, upperLeft, &dwCharsWritten); SetConsoleCursorPosition(hConsole, upperLeft); }
使用时直接调用clearScreen()即可,该方法在所有Windows终端环境下均有效。
方案3:使用ANSI转义序列(需终端支持)
CLion默认PTY及Windows 10+的CMD/PowerShell均支持ANSI转义序列,可使用以下代码:
#include <stdio.h> void clearScreen() { printf("\033[H\033[2J"); fflush(stdout); // 确保输出立即生效 }
额外提示
- 避免使用
conio.h中的函数,此类非标准接口跨平台性极差,现代编译器基本不再支持。 - 尽量减少
system()函数的使用,该函数不仅依赖终端环境,还存在潜在安全风险。
内容的提问来源于stack exchange,提问作者Happy_soul
相关产品推荐
相关产品推荐

