目录
什么是 system("mode con ...")?
system("mode con ...") 是通过 system 函数调用 Windows 命令行中的 mode 命令,用来改变控制台窗口的属性。mode 是一个多功能命令,而 mode con 专门用来设置控制台(con 是“console”的缩写)的样子,比如窗口大小、行数、列数等。
简单来说,它就像一个“控制台装修工”,可以调整窗口的宽度、高度,甚至其他设置。
它长什么样?
跟 system("cls") 一样,system("mode con ...") 还是用 system 函数:
int system(const char* command);
这里的 command 是 "mode con" 加上一些具体的设置参数。比如:
-
system("mode con cols=80 lines=25"):把控制台设为 80 列宽、25 行高。
参数说明:
-
cols=数字:
columns
(列) 指的是控制台窗口的宽度,即每行可以显示多少个字符。 -
lines=数字:
lines
(行) 指的是控制台窗口的高度,即可以显示多少行文本。
注意:
在 Windows 的 mode 命令中,用于设置控制台窗口大小的正确语法是:
mode con: cols=<宽度> lines=<高度>
-
con: 后必须有冒号,表示控制台。
-
cols 和 lines 之间不能有空格,正确写法是 cols=<数值> 和 lines=<数值>,而不是 cols = <数值>。
-
如果语法中有多余的空格(如 cols = 50),Windows 会解析失败,并提示参数无效。
怎么用它?
假设你想把控制台窗口改成 100 列宽、40 行高,可以这样写:
#include <iostream>
#include <cstdlib> // 包含 system 的头文件
int main() {
system("mode con cols=100 lines=40"); // 设置窗口大小
std::cout << "现在窗口是 100 列宽,40 行高!" << std::endl;
return 0;
}
运行这个程序:
-
控制台窗口会变成 100 列 × 40 行。
-
然后显示一条消息。
再试一个例子
如果你想让窗口变小,比如 50 列 × 20 行:
#include <iostream>
#include <cstdlib>
int main() {
std::cout << "原来的窗口可能很大..." << std::endl;
std::cout << "按 Enter 改成 50x20..." << std::endl;
std::cin.get();
system("mode con cols=50 lines=20");
std::cout << "现在窗口变小了!" << std::endl;
return 0;
}
运行后:
-
先显示两条消息。
-
按 Enter,窗口缩成 50 列 × 20 行。
-
显示新消息。
它是怎么工作的?
-
system("mode con ...") 调用 Windows 的 cmd.exe。
-
mode con cols=80 lines=25 是告诉命令行:“把控制台改成 80 列、25 行。”
-
系统收到命令后,调整当前控制台窗口的缓冲区和显示大小。
这跟 system("cls") 类似,都是通过命令行间接操作控制台。
system("mode con ...") 的其他用法
mode con 不止能改大小,还有一些高级选项(不过不常用):
-
system("mode con cp=65001"): 设置代码页为 UTF-8(支持中文等字符)。
-
system("mode con status"): 显示当前控制台的状态(比如大小、输入模式等)。
例子:
#include <cstdlib>
int main() {
system("mode con cp=65001"); // 支持中文
system("echo 你好,世界!");
return 0;
}
优缺点
优点:
-
简单:一行代码就能改窗口大小。
-
直观:参数很好理解(cols 是列,lines 是行)。
缺点:
-
依赖系统:只在 Windows 上有效,Linux 用不了。
-
不够精确:没法像 API 那样精细控制(比如只改缓冲区不改窗口)。
-
效率低:调用外部命令,比 API 慢。
注意事项
-
大小限制:
-
控制台有最大值(通常是 32766 列 × 32766 行),但实际能设多大取决于你的屏幕分辨率和字体大小。
-
如果设得太小(比如 cols=1),可能看不到内容。
-
-
缓冲区 vs 窗口:
-
mode con 同时改缓冲区和窗口大小。如果缓冲区比窗口小,可能会出错。
-
-
中文问题:
-
默认情况下,控制台可能不支持中文,需先用 mode con cp=65001 设置 UTF-8。
-