Visual Studio 2017中实现clrscr()功能的命令及system("cls")报错解决
在Visual Studio 2017 C++中实现清屏功能的方案
首先得明确:clrscr()是老式Turbo C编译器里的控制台清屏函数,Visual Studio 2017的标准C++库并没有内置这个函数,所以需要用替代方案。下面分两部分说明:
一、替代clrscr()的常用方法
1. 使用system("cls")(简单易实现)
这是最常用的清屏方式,本质是调用Windows系统的cls命令。但要注意正确配置头文件和项目设置。
2. 使用Windows API(更高效,无系统命令调用开销)
如果不想依赖系统命令,可以直接调用Windows控制台API来实现清屏,这种方法不会启动额外的cmd进程,效率更高。
二、解决system("cls")报错的问题
你提到已经包含windows.h和conio.h但仍报错,大概率是以下几个原因,对应解决步骤如下:
- 缺少必要的头文件:
system()是标准C库函数,定义在<stdlib.h>中,你需要确保代码里包含了这个头文件(只包含windows.h和conio.h是不够的)。 - 项目子系统设置错误:如果你的项目被设置为"Windows应用程序",控制台窗口不会显示,
system("cls")自然无法工作。修改步骤:
右键项目 → 属性 → 配置属性 → 链接器 → 系统 → 子系统,选择控制台 (/SUBSYSTEM:CONSOLE)。 - 编译模式冲突:如果项目使用Unicode编码,确保代码字符串没有编码问题(不过
system("cls")本身不受Unicode影响,这一点概率较低)。
示例代码
1. 正确使用system("cls")的代码
#include <stdlib.h> // 必须包含此头文件,system()函数的定义在这里 #include <iostream> int main() { std::cout << "这是清屏前的内容\n"; system("cls"); // 执行清屏 std::cout << "清屏完成!\n"; return 0; }
2. 使用Windows API实现自定义清屏函数
#include <windows.h> #include <iostream> void clrscr() { // 获取标准输出句柄 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); if (hConsole == INVALID_HANDLE_VALUE) return; CONSOLE_SCREEN_BUFFER_INFO csbi; if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) return; // 计算控制台缓冲区总字符数 DWORD totalChars = csbi.dwSize.X * csbi.dwSize.Y; COORD topLeft = {0, 0}; DWORD charsWritten; // 用空格填充整个缓冲区 FillConsoleOutputCharacter(hConsole, L' ', totalChars, topLeft, &charsWritten); // 重置文本属性为当前默认值 FillConsoleOutputAttribute(hConsole, csbi.wAttributes, totalChars, topLeft, &charsWritten); // 将光标移回左上角 SetConsoleCursorPosition(hConsole, topLeft); } int main() { std::cout << "这是清屏前的内容\n"; clrscr(); // 调用自定义清屏函数 std::cout << "用Windows API完成清屏!\n"; return 0; }
内容的提问来源于stack exchange,提问作者Smriti Rastogi
相关产品推荐
相关产品推荐

