一、outtextxy的参数类型
这是easyx对outtextxy的函数描述:
void outtextxy(
int x,
int y,
LPCTSTR str
);
void outtextxy(
int x,
int y,
TCHAR c
);
参数
x:字符串输出时头字母的 x 轴的坐标值。
y:字符串输出时头字母的 y 轴的坐标值。
str:待输出的字符串的指针。
c:待输出的字符。
返回值:无。
所以只能输出字符和字符串,假如用以下代码并不会输出5,同样会认为是字符串。
#include <graphics.h>
using namespace std;
int main()
{
initgraph(740, 580); // 创建绘图窗口,大小为 740x580 像素
setbkcolor(RGB(222, 213, 176)); //设置背景颜色
cleardevice();
int a = 5;
settextcolor(0); //设置字体颜色
//settextstyle(16, 0, _T("宋体"));
outtextxy(200,200, a);
system("pause"); //暂停
closegraph(); // 关闭绘图窗口*/
return 0;
}
二、将整形转化为字符串出现的问题及原因
假如加上这两句代码将整型转换为字符串后,
char num[20];
sprintf(num, "%d", a);
主函数变为
int main()
{
initgraph(740, 580); // 创建绘图窗口,大小为 740x580 像素
setbkcolor(RGB(222, 213, 176)); //设置背景颜色
cleardevice();
int a = 5;
settextcolor(0); //设置字体颜色
//settextstyle(16, 0, _T("宋体"));
char num[20];
sprintf(num, "%d", a);
outtextxy(200,200, num);
system("pause"); //暂停
closegraph(); // 关闭绘图窗口*/
return 0;
}
会出现报错,
出现原因如下:
大致是由于字符编码的问题引起的。
VC6.0 默认使用的 MBCS 编码,而 VC2008 及更高版本 VC 默认使用的 Unicode 编码。
以下详细解释这个问题:
用 char 表示字符时,英文占用一个字节,中文站用两个字节。
这样有一个严重的问题:两个连续字节,究竟是两个英文字符,还是一个中文字符?
为了解决这个问题,Unicode 编码诞生了。Unicode 编码不管中文英文都用两个字节表示。
对于 MBCS 编码,字符变量用 char 定义。
对于 Unicode 编码中,字符变量用 wchar_t 定义。
为了提高代码的自适应性,微软在 tchar.h 里面定义了 TCHAR,而 TCHAR 会根据项目定义的编码,自动展开为 char 或 wchar_t。
在 Windows API 和 EasyX 里面的大多数字符串指针都用的 LPCTSTR 或 LPTSTR 类型,LPCTSTR / LPTSTR 就是“Long Point (Const) Tchar STRing”的缩写。所以可以认为,LPCTSTR 就是 const TCHAR *,LPTSTR 就是 TCHAR * 。
于是,在 VS2013里面,给函数传递 char 字符串时,就会提示如上错误。
这段原因转载于
https://blog.csdn.net/qq_44256828/article/details/89279697
三、解决办法
我实测找到两种解决办法。
1.保持上面代码保持不变,修改一下vs设置。
首先从项目选项找到属性
然后在高级设置中,选中字符集,将默认的“使用 Unicode 字符集”为“使用多字节字符集”,就可以了。
2.保持设置不变,修改一下代码。
将之前增加的两行代码修改为
wchar_t num[20];
_itow_s(a, num, 10);
将整型5转化为字符串后存到num中。
输出后结果正确