EGE专栏:EGE专栏
文章目录
-
- 快速浏览相关问题
-
- 1. 什么是控制台窗口?
- 2. 为什么控制台本来可以用?EGE以后就不能用了?
- 3. 使用printf()为什么不能在那里?EGE显示在窗口上
- 4. 可以关掉控制台不显示吗?
- 一、前言
- 二、EGE设置中控台
-
- 1. Visual Studio
-
- 1.1 VS 不显示控制台 以及 无法输入输出的情况
- 1.2 VS关闭控制台
- 2. CodeBlocks
-
- 2.1 CodeBlocks 控制台显示但无法输入输出
- 2.2 CodeBlocks 关闭控制台的方法
- 3. Dev-C
-
- 3.1 Dev-C 控制台不显示或不可用的原因
- 3.2 Dev-C 中关控制台的方法
- 4. Visual Studio Code
-
- 4.1 GCC 开关控制台参数 (-mwindows)
- 4.2 Visual Studio Code 控制台显示模式
- 三、EGE中控制台的使用
-
- 1. 控制台输入
- 2. getch()冲突问题
快速浏览相关问题
1. 什么是控制台窗口?
??C/C 可接收用户按键输入和可显示字符的黑窗。

2. 为什么控制台本来可以用?EGE后就不能用了?
??首先,配置EGE之后还是可以用的,但是配置的时候控制台很可能会被禁用,需要启用控制台才能使用。
??主要分为两类:
- 使用MSVC编译器的 ,包含EGE后,若要使用,可以在包含ege在设置宏定义文件之前
#define SHOW_CONSOLE。如
#define SHOW_CONSOLE #include <graphics.h>
- 其它使用 GCC 编译软件,如Dev-C , CodeBlocks等。这个是的,如果不能使用,大部分配置都是错误的,即在配置时添加更多的链接参数
-mwindows,不要加这个。
3. 使用printf()为什么不能在那里?EGE显示在窗口上
??EGE窗口是图形窗口,不能使用标准输入输出(如printf, scanf),用于控制台。EGE窗口输出文本,需要使用替代品xyprintf()函数, 函数名为 xy printf, xy代表坐标的含义。使用方法如下:
printf("Hello world.\n"); 对应 xyprintf(20, 30, "Hello world."); 其中 xyprintf() 前两个参数 (20, 30) 表示窗口文本的位置坐标 ( x , y ) (x, y) (x,y)。
4. 可以关掉控制台不显示吗?
??可以。 ??VS 默认关闭控制台,如果不显示,则不添加宏定义SHOW_CONSOLE可以。如果仍然显示,可以在项目属性中,配置属性->链接->系统里将 改为 。 ??使用GCC的软件如 Dev-C , CodeBlocks 程序可以在项目属性中设置为 , 或者添加 -mwindows 链接参数。
一、前言
?? 是我们学习C/C 它以窗口的形式为我们提供了一个与用户互动的环境,使我们可以通过调用一些相关函数获得用户输入,并在屏幕上显示操作结果。
??在C语言的 在程序中,通过标准库
#include <stdio.h>
int main()
{
printf("Hello world.\n");
return 0;
}
但是正是因为多数C语言课程主要教授的是C语言的语法知识和一些基础的算法,对于教学来说使用控制台是足够了的,但是会让人觉得编程就只能使用这个黑窗口。 EGE作为学习编程的一个过渡工具,就是为了给初学者增加学习的乐趣以及传输一些图形编程方面的知识而给程序加入了图形窗口,让初学者能够使用C语言进行绘图,而不是单纯地对数据进行计算。那为什么使用较为简单的EGE图形库而不是那些商业图形库呢? 因为那些图形库需要不低的编程水平,如果让初学者接触那些现代的图形库,初学者会觉得难以掌握,学习时估计会学到崩溃。
EGE通过
额外创建一个图形窗口 并增加可以在上面绘图的函数,实现了基础的绘图功能,这已经能够满足学习的需求了。当学生想进一步学习时,可以考虑将现代化的商业图形库作业进阶学习内容。
二、EGE中控制台的设置
图形界面中,输入输出是没有控制台那么方便的,并且控制台可以一条一条地显示文本信息,
EGE在部分编译器(如MSVC)下,是
其实控制台的输入输出和平常的操作是一样的,没有作用只是
EGE对控制台做了屏蔽操作,意思正常运行情况下不应该携带控制台 。
对于常用的三款IDE,下面介绍一下如何设置控制台的显示与关闭,并解决无法在控制台中输入输出的问题。
1. Visual Studio
1.1 VS 控制台不显示 以及 无法进行输入输出的情况
在
如果想(show console, 即显示控制台)
需要注意的是,是 所有的
#define SHOW_CONSOLE //在#include <graphics.h>或 <ege.h>之前加上
#include <graphics.h>
现在,源文件中输入下面的程序,如果弹出了控制台窗口, 并显示了 conio.h头文件中的getch()会有些冲突)
#define SHOW_CONSOLE
#include <stdio.h>
#include <graphics.h>
int main()
{
printf("Hello ege."); //控制台输出
initgraph(640, 480, 0); //创建EGE图形窗口
setbkcolor(WHITE);
getch();
closegraph();
return 0;
}
1.2 VS控制台的关闭问题
如果想使用,参照上面的说明,定义一下
先进入
对
再运行一下下面的程序,看看控制台是不是默认关闭的。想弹出的话定义
#include <stdio.h>
#include <graphics.h>
int main()
{
printf("Hello ege."); //控制台输出
initgraph(640, 480, 0); //创建EGE图形窗口
setbkcolor(WHITE);
getch();
closegraph();
return 0;
}
2. CodeBlocks
2.1 CodeBlocks 控制台显示但无法输入输出的情况
在有些人的配置教程,会有一个
- ege (项目选项)
- Debug (目标配置选项)
- Release(目标配置选项)。
检查一下,三个选项的配置,
2.2 CodeBlocks 关闭控制台的方法
这里主要是设置项目类型为
- 点击
Build targets ,把上面的Type 改为GUI application ,而不是Console application , 点击OK
- 选择
Build -> Rebuild , 然后选择Build -> Run 运行(工具栏也有,直接点就行) 可以看到控制台窗口已经没了 直接双击运行生成的exe文件也是没有控制台窗口的
3. Dev-C++
Dev-C++默认是显示控制台窗口的,直接就可以使用
3.1 Dev-C++ 控制台不显示或不可用的原因
如果创建空项目时,控制台却不可用,那可能是你配置EGE时出了差错。是不是错把 ( 当然,如果你知道 GCC 的编译参数,是可以额外添加其它的参数的。 )
3.2 Dev-C++ 中关闭控制台的方法
点击工具栏
4. Visual Studio Code
Visual Studio Code 内部并没有集成默认编译器,需要配合外部编译器使用。所以这里的配置仅针对GCC 编译器,其它编译器可以翻阅相关资料。
4.1 GCC 开启关闭控制台的参数 (-mwindows)
GCC 只需要在链接时加入 -mwindows 参数即可
g++ main.cpp -o ege.exe -lgraphics64 -luuid -lmsimg32 -lgdi32 -limm32 -lole32 -loleaut32 -lwinmm -lgdiplus -mwindows
g++
- main.cpp //文件名
- -o ege.exe //生成执行文件名
- -lgraphics64 -luuid -lmsimg32 -lgdi32 -limm32 -lole32 -loleaut32 -lwinmm -lgdiplus //链接库
- -mwindows //编译成图形界面程序而不是控制台程序
编译指令是在tasks.json 中设置
4.2 Visual Studio Code 控制台显示模式
Visual Studio Code有cppdbg:ege.exe 选项即为程序运行时的控制台。 如果想要设置控制台单独打开一个窗口,而不是集成到终端界面,可以在 launch.json 的配置项 externConsole中设置
true : 生成外部控制台(黑框框)false : 集成到终端界面,交互都在这里进行。
三、EGE中控制台的使用
如果参照上面配置完成后,并且控制台已经可以使用后,就可以在程序利用控制台进行输入输出了。
需要注意的是,我们应该
有人问过:控制台输入的变量,怎么在EGE窗口中使用呢?窗口只是用来交互的,主体还是程序,输入的数据会进入到程序里面,程序可以对这些数据随意进行处理,之后通过调用
控制台我们是用
1. 控制台输入
控制台的输入输出和原来的操作是一样。下面的一个示例代码通过从控制台中输入参数来控制绘图。 代码如下: 即通过控制台输入圆的半径,绘图时根据这个参数绘制圆。 (输入数字,回车后就可以显示出圆,输入的数字不同,圆的大小也不同。)
#define SHOW_CONSOLE
#include <graphics.h>
#include <cstdio>
int main()
{
initgraph(640, 480, 0);
setcolor(EGERGB(0xFF, 0x0, 0x0));
setbkcolor(WHITE);
//控制台交互,通过输入半径值控制圆的大小
printf("请输入圆的半径(1~200)之间):");
int radius = 100;
scanf("%d", &radius);
//半径范围限制
if (radius < 1)
radius = 1;
else if (radius > 200)
radius = 200;
//绘制半径为radius的圆
circle(320, 240, radius);
getch();
closegraph();
return 0;
}
2. getch()的冲突问题
EGE中定义了和
但是我们在使用控制台时,还是有(注意,VS中使用 getch() 可能会报错,这时候就要换成 _getch())
如下图,在项目中额外(将代码写在多个文件上,分别编译后,链接生成执行程序),并非只写一个文件。 下面是 源文件:<conio.h>,然后自定义一个函数来调用<conio.h>中的getch()函数。
在Visual Studio中,
getch()会报错,因为getch()已被弃用,可以将getch()改成_getch()。
#include <conio.h>
int getch_console()
{
return getch(); //控制台暂停 -->VS中,报错则可以改成 _getch()
}
下面是 源文件:(注意了,这里需要用到上面 console.cpp 中定义的 getch_console() 函数 ,单单 main.cpp 是无法编译成功的)
#define SHOW_CONSOLE
#include <graphics.h>
#include <cstdio>
int getch_console(); //声明一下这个函数,放在头文件也行
int main()
{
initgraph(640, 480, 0);
setcolor(EGERGB(0xFF, 0x0, 0x0));
setbkcolor(WHITE);
xyprintf(20, 20, "控制台暂停,请查看控制台");
//控制台交互,通过输入半径值控制圆的大小
printf("暂停,按任意键继续\n");
//控制台暂停
getch_console();
cleardevice();
circle(320, 240, 100);
printf("\n圆已经输出到EGE图形窗口了,请查看EGE窗口\n");
//EGE窗口暂停
xyprintf(20, 20, "暂停,按任意键继续 ");
getch();
closegraph();
return 0;
}
专栏:EGE专栏