关于标点符号在C语言中输出的问题

cang_er03 2008-07-11 09:55:29
我在C语言中想输出"发射/接收"这几个字符,因为要变字体颜色,所以我使用了汉字输出函数outchn,采用分段的方式,基本实现了对他们的输出:
outchn(x-3,y,"发射",BLUE);
outchn(x+29,y+5,"/",BLUE);
outchn(x+37,y,"接收",BLUE);
但是现在我想把发射和接收的字体变大,使用了另外的汉字输出函数outchn24,汉字是变大了,但是"/"却不能用outchn24输出,用outchn输出的话又太小,该如何做比较好!
请知道的朋友告诉我,谢谢!
...全文
493 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yujie_v 2008-07-22
  • 打赏
  • 举报
回复
好难A
上山老人 2008-07-22
  • 打赏
  • 举报
回复
输出最右边的
cang_er03 2008-07-14
  • 打赏
  • 举报
回复
outchn是什么东西,我还真不知道,楼主知道的话告诉我.
这个问题肯定是由于/符号的特殊性造成的,一般的解决方法就是在/前面加一个转义字符.
或者查处/符号在中文中的内码(或者其他表示方式),然后传递编码进去,就可以了.
'''''''''''''''''''''''''''''''''''''''''''''''''''
恩,我有试过,只要是标点符号就会出现我所说的问题.我想应该是特殊性造成的.如何加转义字符呢?
我不是很明白,因为第一次遇到这个问题,下面的outchn和outchn24两个汉字输出函数都是老师给我的,
但我不是很明白,可以给我稍微讲一下吗?它们都是用做汉字输出,有什么区别吗?(我调试的结果:
outchn输出的字体较小,outchn24输出的字体较大;outchn可以输出'/',outchn24输出'/'时会死机,
或是不能输出),从原理上我不是很明白,不知如何按照您所说的修改是好?请赐教!谢谢!
int outchn(register int x,register int y,char *ChnString,int nColor)
{
int OldColor;
OldColor=getcolor();
setcolor(nColor);
while(*ChnString)
{
if((( unsigned char) *ChnString >=0xal && (unsigned char) *ChnString <=0xfe) && ((unsigned char ) *(ChnString+1)>=0xa1 && (unsigned char) *(ChnString+1)<=0xfe))
{
if(( x+16-1)>getmaxx()||(y+16-1)> getmaxy())
return false;
Disp_Hzl(x,y,*ChnString,*(ChnString+1),nColor);
ChnString+=2;
x+=16+2;
moveto(x,y);
}
else
{
char q[2];
moveto(x,y);
*q=*ChnString;
*(q+1)='\0';
settextstyle(2,HORIZ_DIR,5);

outtextxy(x,y,q);
x+=8+1;
ChnString+=1;
}
}
setcolor(OldColor);
return 1;
}

void outchn24(register int x,register int y,char *Str,int nColor)
{
unsigned Zcode, Bcode; /* 区码, 位码 */
int i, j, k, Rec;
long Len;
char Buf[72];
FILE *fp;
int OldColor;
OldColor=getcolor();
setcolor(nColor);

fp = fopen("c:\\ndt\\CLIB24S", "rb");
if(fp==NULL)
{
outtextxy(20,20,"Can't open clib24s file! Press any key to halt..");
getch();
exit(0);
}

while (*Str) /* 直到字串显示完 */
{
if ((*Str & 0x80) && (*(Str+1) &0x80)) /* 是汉字 */
{
Zcode = (*Str-0xa1) & 0x07f; /* 区码 */
Bcode = (*(Str+1)-0xa1) & 0x07f; /* 位码 */
Rec = Zcode*94+Bcode; /* 记录号 */
Len = Rec*72L; /* 在字库中位置 */
fseek(fp, Len, SEEK_SET);
fread (Buf, 1, 72, fp); /* 连续读取72字节 */
for (i = 0; i < 24; i++) /* 水平方向的24个点 */
for (j = 0; j < 3; j++) /* 垂直方向的3个字节 */
for (k = 0; k < 8; k++) /* 每个字节的8位 */
if (Buf[i*3+j] >> (7-k) & 1)
putpixel(x+i, y+j*8+k, nColor);
x = x+24+2;/* 乘以2/3保证16点素*/
Str+= 2;
}
}
fclose(fp);

setcolor(OldColor);

}

cang_er03 2008-07-14
  • 打赏
  • 举报
回复
有没英文输出函数调下

''''''''''''''''''''''''''''''''''''''''
我有用英文输出函数调试,与outchn一样的调试结果.
cang_er03 2008-07-14
  • 打赏
  • 举报
回复
,但是"/"却不能用outchn24输出,用outchn输出的话又太小,该如何做比较好!

用全角不行吗

''''''''''''''''''''''''''''''''''''''''''''''
用全角不行,我调试过了!
「已注销」 2008-07-12
  • 打赏
  • 举报
回复
outchn是什么东西,我还真不知道,楼主知道的话告诉我.
这个问题肯定是由于/符号的特殊性造成的,一般的解决方法就是在/前面加一个转义字符.
或者查处/符号在中文中的内码(或者其他表示方式),然后传递编码进去,就可以了.
K行天下 2008-07-11
  • 打赏
  • 举报
回复
,但是"/"却不能用outchn24输出,用outchn输出的话又太小,该如何做比较好!

用全角不行吗
babyvox1999 2008-07-11
  • 打赏
  • 举报
回复
有没英文输出函数调下
cang_er03 2008-07-11
  • 打赏
  • 举报
回复
谢谢wmcxg!程序的界面做得差不多了,但还有这个问题没有解决!
请会的朋友提示我一下.
wmcxg 2008-07-11
  • 打赏
  • 举报
回复
我也是新手
不会
不过帮你顶上去
C语言教程(原书第4版) 《c语言教程(原书第4版)》是一本优秀的c程序设计语言教材,完整描述了ansi c语言及其语法特性,并对c语言的高级特性和应用作了深入阐述,介绍了从c到c++和java过渡的相关知识。《c语言教程(原书第4版)》的一个鲜明特色就是结合大量示例描述c语言的重要特征,并对很多工作代码给出了逐步的分析,以这种独特的教学方法向读者解释新接触的编程元素及一些惯用法。   《c语言教程(原书第4版)》系统、完整,可作为c语言的参考手册,也非常适合作为学习c语言的入门和高级课程教材。 前言 第0章 从零开始 0.1 为什么要用c 0.2 ansi c标准 0.3 从c到c++ 0.4 从c和c++到java 第1章 c语言概述 1.1 编程和预备知识 1.2 程序输出 1.3 变量、表达式和赋值 1.4 使用#define和#include 1.5 使用printf()和scanf() 1.6 控制流 1.7 函数 1.8 数组、字符串和指针 1.8.1 数组 1.8.2 字符串 1.8.3 指针 1.9 文件 1.10 与操作系统有关的内容 1.10.1 编写和运行c程序 1.10.2 断程序 1.10.3 输入文件尾标志 1.10.4 输入和输出的重定向 1.11 总结 1.12 练习 第2章 词法元素、操作符和c系统 2.1 字符和词法元素 2.2 语法规则 2.3 注释 2.4 关键字 2.5 标识符 2.6 常量 2.7 字符串常量 2.8 操作符和标点符号 2.9 操作符的优先级和结合性 2.10 增值操作符和减值操作符 2.11 赋值操作符 2.12 例子:计算2的乘方 2.13 c系统 2.13.1 预处理器 2.13.2 标准函数库 2.14 总结 2.15 练习 第3章 基本数据类型 3.1 声明、表达式和赋值 3.2 基本数据类型 3.3 字符和char数据类型 3.4 int数据类型 3.5 整数类型short、long和unsigned 3.6 浮点类型 3.7 typedef的用法 3.8 sizeof操作符 3.9 使用getchar()和putchar() 3.10 数学函数 3.10.1 使用abs()和fabs() 3.10.2 unix和数学函数库 3.11 隐式类型转换和强制类型转换 3.11.1 整型提升 3.11.2 寻常算术转换 3.11.3 强制类型转换 3.12 十六进制和八进制常量 3.13 总结 3.14 练习 第4章 控制流 4.1 关系操作符、相等操作符和逻辑操作符 4.2 关系操作符和表达式 4.3 相等操作符和表达式 4.4 逻辑操作符和表达式 4.5 复合语句 4.6 表达式和空语句 4.7 if和if-else语句 4.8 while语句 4.9 for语句 4.10 例子:布尔变量 4.11 逗号操作符 4.12 do语句 4.13 例子:斐波那契数 4.14 goto语句 4.15 break和continue语句 4.16 switch语句 4.17 条件操作符 4.18 总结 4.19 练习 第5章 函数 5.1 函数定义 5.2 return语句 5.3 函数原型 5.4 例子:创建乘方表 5.5 从编译器的角度观察函数原型 5.6 函数定义顺序的另一种风格 5.7 函数调用和传值调用 5.8 开发大型程序 5.9 使用断言 5.10 作用域规则 5.10.1 平行和嵌套代码块 5.10.2 以调试为目的使用代码块 5.11 存储类型 5.11.1 auto存储类型 5.11.2 extern存储类型 5.11.3 register存储类型 5.11.4 static存储类型 5.12 静态外部变量 5.13 默认初始化 5.14 递归 5.15 例子:汉诺塔 5.16 总结 5.17 练习 第6章 数组、指针和字符串 6.1 一维数组 6.1.1 初始化 6.1.2 下标 6.2 指针 6.3 传引用调用 6.4 数组和指针之间的关系 6.5 指针运算和元素的大小 6.6 数组作为函数的实参 6.7 例子:冒泡排序 6.8 用calloc()和malloc()进行动态内存分配 6.9 例子:归并和归并排序 6.10 字符串 6.11 标准函数库的字符串处理函数 6.12 多维数组 6.12.1 二维数组 6.12.2 存储映射函数 6.12.3 形式参数声明 6.12.4 三维数组 6.12.5 初始化 6.12.6 使用typedef 6.13 指针数组 6.14 main()函数的参数 6.15 不规则数组 6.16 函数作为参数 6.17 例子:使用二分法寻找函数的根 6.18 函数指针数组 6.19 类型限定符const和volatile 6.20 总结 6.21 练习 第7章 位操作符和枚举类型 7.1 位操作符和表达式 7.1.1 按位求反 7.1.2 补码 7.1.3 位逻辑操作符 7.1.4 左移位和右移位操作符 7.2 掩码 7.3 软件工具:打印int值的二进制形式 7.4 包装和解包 7.5 枚举类型 7.6 例子:“石头、剪刀、布”游戏 7.7 总结 7.8 练习 第8章 预处理器 8.1 #include的使用 8.2 使用#define 8.3 带参数的宏 8.4 stddef.h的类型定义和宏 8.5 例子:用qsort()进行排序 8.6 例子:带参数的宏 8.7 stdio.h和ctype.h的宏 8.8 条件编译 8.9 预定义的宏 8.10 “#”和“##”操作符 8.11 assert()宏 8.12 使用#error和#pragma 8.13 行号 8.14 对应的函数 8.15 例子:快速排序 8.16 总结 8.17 练习 第9章 结构和联合 9.1 结构 9.2 访问结构成员 9.3 操作符的优先级和结合性的总结 9.4 在函数使用结构 9.5 结构的初始化 9.6 例子:玩扑克牌 9.7 联合 9.8 位字段 9.9 例子:访问位和字节 9.10 adt堆栈 9.11 总结 9.12 练习 第10章 结构和列表处理 10.1 自引用的结构 10.2 线性链表 10.3 链表操作 10.4 一些链表处理函数 10.4.1 插入 10.4.2 删除 10.5 堆栈 10.6 例子:波兰记法和堆栈求值 10.7 队列 10.8 二叉树 10.8.1 二叉树的遍历 10.8.2 创建树 10.9 普通的树 10.9.1 遍历 10.9.2 calloc()的用法以及树的创建 10.10 总结 10.11 练习 第11章 输入/输出和操作系统 11.1 输出函数printf() 11.2 输入函数scanf() 11.3 fprintf()、fscanf()、sprintf() 和sscanf()函数 11.4 fopen()和fclose()函数 11.5 例子:对文件进行空间加倍 11.6 使用临时文件和优雅函数 11.7 随机访问文件 11.8 文件描述符输入/输出 11.9 文件访问权限 11.10 在c程序内部执行命令 11.11 在c程序内部使用管道 11.12 环境变量 11.13 c编译器 11.14 使用性能评估程序 11.15 函数库 11.16 对c代码进行计时 11.17 使用make 11.18 使用touch 11.19 其他有用的工具 11.20 总结 11.21 练习 第12章 高级应用 12.1 用fork()创建并发进程 12.2 进程的叠加:exec...()函数族系 12.3 使用pipe()实现进程间的通信 12.4 信号 12.5 例子:哲学家用餐问题 12.6 矩阵的动态分配 12.6.1 为什么二维数组无法满足要求 12.6.2 用指针数组创建矩阵 12.6.3 调整下标范围 12.6.4 一次分配所有内存 12.7 返回状态 12.8 总结 12.9 练习 第13章 从c到c++ 13.1 输出 13.2 输入 13.3 函数 13.4 类和抽象数据类型 13.5 重载 13.6 构造函数和析构函数 13.7 面向对象编程和继承 13.8 多态 13.9 模板 13.10 c++的异常 13.11 面向对象编程的优点 13.12 总结 13.13 练习 第14章 从c到java 14.1 输出 14.2 变量和类型 14.3 类和抽象数据类型 14.4 重载 14.5 类的创建和销毁 14.6 面向对象编程和继承 14.7 多态和重写方法 14.8 applet 14.9 java的异常 14.10 java和oop的优势 14.11 总结 14.12 练习 附录a 标准函数库 附录b c的语法 附录c ansi c与传统c的比较 附录d ascii字符码 附录e 操作符的优先级和结合性

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧