YangW

无为,无我,无欲,居下,清虚,自然

编程私教:实用派的 C/C++ 语言编程教育(我是慢羊羊)

前言

所谓教育,就是教和育。

众所周知,传统教学,是有教无育。在我这里,我也做不到 24 小时盯着学生,所以我也不可能培育好一个人的品性。我能做到的,仅仅是针对不良习惯的劝诫。如果无效,我会停止对该学生的教学。

我的一些示例作品:https://www.codebus.cn/yangw

我的一些文章:https://www.codeabc.cn/yangw

这是时代,由于编程教育的特殊性,导致老师的水平参差不齐,教 Java 的老师都未必能正确念出来 Java 这个单词。希望各位同学能找到自己心仪的老师。

免费辅导内容

我会不定时的在以下几个 QQ 群里游荡:

  • 1059085 (C语言革命0)
  • 8086730 (C语言革命1)
  • 2861971 (C语言革命2)
  • 19430

...

打开帮助文件 EasyX_Help.chm 后,内容为空白的解决办法

有些同学遇到这样的问题,打开 EasyX 的帮助文档 EasyX_Help.chm 之后,发现所有的内容点击后都是空白的,就像下面这样:

这是由于 Windows 的安全机制造成的,当你从网上直接下载一个 chm 文件,或者用 Windows 资源管理器从压缩包里面解压出来 chm 文件,都会被 Windows 认为目标文件不够安全,然后默认被锁定。

所以,只需要简单解锁就可以了。

这样做:右击 EasyX_Help.chm 文件,在属性页中,会看到底部的“安全”一项,“解除锁定”没有勾选,如下图:

只需要简单的勾选“解除锁定”,然后点击确定,就可以正常浏览 chm 文件了。

为什么屏幕分辨率是 640x480?

常见的屏幕分辨率很奇怪,为什么总用一些不零不整的数字?比如以前最常见的分辨率是 640x480,当初为什么这么设计?

因为这个分辨率运算速度比较快,人也相对比较好记。

大家知道,屏幕上的每一个点,都会对应内存中的一个位置。比如 640x480@256色,表示每个点占用一个字节,整个屏幕有 640x480=300k 个点,占用 300KB 内存。屏幕的每一个像素的保存,在内存中是线性存储结构。在屏幕上的坐标 (x, y) 画一个点,就相当于在对应显存偏移 y * 640 + x 的位置赋值。

PS:在这篇文章中有一段代码,可以实践一下通过内存赋值来直接画点:http://www.easyx.cn/skills/View.aspx?id=55

每绘制一个点,都需要执行一次乘法和一次加法运算。所有的绘图操作都需要调用画点函数,因此提高画点的效率,将会提升所有绘图操作的速度。

现在我们将计算内存偏移量的算法修改一下:

d = y * 640 + x
...

在 VC 下清空键盘缓冲区的方法

(以下代码在 VC 下通过)

控制台窗口是有输入缓冲区的,当你按键后程序没有来得及处理,系统会将按键缓存,等到程序获取按键的时候,系统会把缓冲区里面之前的按键返回。

例如这个程序:

#include <graphics.h>
#include <stdio.h>
#include <conio.h>

int main()
{
	printf("延时 5 秒钟。请在 5 秒钟内随便按键。\n");
	Sleep(5000);

	printf("延时结束。刚才您按下的按键是:\n");

	while (_kbhit())
	{
		char c = _getch();
		printf("%c", c);
	};

	return 0;
}

请自己执行一下前面的程序,在 5 秒延时内随便按键,等到延时结束,可以看到程序可以读出刚才的按键。

但是有些时候,我们是不需要保留之前的按键的。我们可以借助 W

...

使 VC2013 编写的程序运行在其它电脑上

Visual Studio 2013 中带了新版本的 Visual C++,并且微软发不了免费的 Visual C++ 2013 Express,学习编程用很方便。

VC2013 默认编写的 .exe 使用动态链接方式链接的运行时库,所以,编写的程序要在别的电脑上运行,需要在其它电脑安装 VC2013 的运行时库,然后就可以完美运行你的 .exe 程序。当然,如果你觉得安装运行时库很麻烦,你可以用静态链接的形式编译你的 .exe 程序。方法如下(以英文版 Visual Studio 2013 为例):

1. 打开 Visual Studio 2013,创建 Win32 Console Application(或者 Win32 Application)。

2. 编写程序。

3. 项目编译模式默认分为 Debug 和 Release 两种模式。Debug 模式带有各种调试信息,方便排查错误,使用的调试版本库。Release 模式删除了调试信息,使得编译的文件更小,执行速度更快。因此,在调试程序的时候,要用 Debug 模式。在调

...

学习保存应用程序的配置信息

应用程序启动后,用户会有各种操作。当用户下一次启动应用程序时,就会希望保持上一次的操作状态。或者游戏结束后,需要将最高分记录等等。因此,我们需要在程序关闭的时候,将一些必要的变量保存下来,并且在下一次程序启动的时候,读取这些变量。

通常,可以把这些变量保存在“配置文件”中。配置文件一般以 .ini 为扩展名。例如在 \windows 文件夹里面可以找到很多 .ini 文件。.ini 文件的内容是纯文本的,可以直接双击打开编辑。举一个实际例子,下面是一个标准的 .ini 配置文件的内容:

; EasyX 范例
[Ball]
x=10
y=37
r=20
[Wall]
width=70
height=60

可以看到,配置文件的格式很简单,包括三种情况:

  1. 注释:写在半角分号后面;
  2. 节:用方括号括起来;
  3. 变量:用“键=值”这种形式记录,整形和字符串不做区分。
...

用 Visual C++ 编写可以在 Borland C++ 3.1 下编译执行的程序

由于某些学校的硬性规定,课设必须用 Borland C++ 3.1(以下简称 BC) 一类 DOS 下的编程工具完成。

但是,BC 用起来很费劲,毕竟是 dos 时代的工具,无论编辑还是调试,都很吃力。尤其是图形程序,由于涉及到硬件及系统的问题,导致程序不能在 win7 及以上版本的 Windows 中运行,必须借助 dosbox 一类工具或者虚拟机才可以,麻烦多多。

本文通过一些常用的技巧,讲解怎样用 Visual C++(以下简称 VC) 编写可以在 BC 下直接编译运行的程序。

这样做的好处就是,可以节约大量的编码和调试时间。众所周知,当程序规模比较大的时候,调试时间会超过编码时间。而 VC 的强大调试功能,远不是 BC 能比的。同时,windows 下便捷的编辑环境,也比 BC 能��约很多时间。再比如有些人的显示器可以旋转,将 24 寸的显示器旋转 90 度竖着用,一屏可以阅读上百行代码,这种效率,绝对不是 BC 那一屏 20 多行代码可以比的。即便 BC 启用 43 行模式,效果仍然很差。

所以,下面的这个方法看似

...

实现桌面截图

本文讲解怎样截取整个桌面的图像。

对于控制台程序,执行后首先会创建一个黑色的控制台窗口,然后才会启动你的程序。因此这时候抓到的图,会包括一个黑色的控制台窗口,我想,这是大多数人不希望看到的。因此,实现抓图,要建立的项目需要是 Win32 Application,而不能是平时用的 Win32 Console Application。怎样创建一个 Win32 Application,请参考文章《在没有控制台的 Win32 Application 中使用 EasyX 绘图》。

[名词介绍]

DC:英文单词 Device Contexts(设备上下文) 的缩写。DC 中包含有用于该设备的一组绘图对象以及这些对象的属性(例如画笔、画刷等)。

[原理简介]

要获取桌面内容,先要获取桌面的 DC,然后再通过图像拷贝语句将桌面图像的内容拷贝到 IMAGE 的 DC 中。

[实现步骤]

因为实现起来简单,步骤已经以注释的形式写到了下面的示例代码中:

...

一步步拓展程序,实现文字在背景上的移动

本文适用读者:已经学完 C 语言基本知识,并对 EasyX 略有了解。

本文范例实现的功能:文字在背景上移动,并且不破坏背景。

本文范例编译平台:VC6 / VC2010 + EasyX 20140321(beta)。

本文并不直接写出最终代码,而是从最开始绘制背景,一步步拓展到我们需要的功能。希望这个过程能对初学者有所启发。

一、绘制背景

为了实现文字移动而不破坏背景的效果,我们先画个背景。做法很简单,就是画一连串的竖线,并且每次变换颜色,这样就能弄一个渐变色的背景,代码如下:

#include <graphics.h>
#include <conio.h>

// 主函数
void main()
{
	// 创建绘图窗口
	initgraph(640, 480);
	
	// 绘制背景
	for(int i = 0; i < 640; i++)
	{
		setlinecolor(i);
		li
...

怎样编写格式优美的代码

0. 序

很多初学者会被人一眼就看出来是初学者,为什么?原因很多。其中,代码格式是很重要的一项。不注重代码格式,不仅别人看起来不舒服,还会影响自己对代码的阅读。虽然错误的格式不会产生编译错误,但却会让你更容易犯错,并且更难排查错误。所以,学会编写格式优美的代码,是初学者必须要学的一课。

优秀的代码格式并不是唯一的,有很多种风格。本文仅讲解常见的 C/C++ 语言编码规则,而其它规则相信大家在学习工作中会慢慢接触到。

再有就是,为了便于阅读代码,EasyX 网站的代码都是比较注意格式的。所以,如果打算投稿到 EasyX,看看本文也很有必要。

以下讲解编写代码时在格式上一些常见的注意事项。

1. 正确缩进

所谓缩进,是指在某一行代码的左端留出一部分空白。采用缩进的目的为了清楚的定义一个块的开始和结束,这样会使程序更加清晰易读。虽然目前主流的开发平台都具备智能缩进的功能,但是很多时候修改代码还是需要自己注意缩进问题。

下面的范例代码是求解 100 以内的质数,该范例中有多种缩进情况的例子:

...