关于c语言putchar用法的putchar()函数

巧改putchar函数,实现单片机下多形式输出
已有 5382 次阅读
|个人分类:|系统分类:|关键词:单片机,C语言,putchar
& 最近看学生编的单片机C程序,发现多个地方出现类似的下面两行:
&& &len=sprintf(sdata,&@:%c %02u-%02u-%02u %02u:%02u:%02u\r\n&, DataBuf[0],&& (unsigned int)DataBuf[4]+2000,(unsigned int)DataBuf[5],(unsigned int)DataBuf[6],&& (unsigned int)DataBuf[7],(unsigned int)DataBuf[8],(unsigned int)DataBuf[9]);&& for(i=0;i&i++) UART0_OP(sdata[i]);
&& 第一行生成一个字符串,第二行将字符串通过单片机串口1输出。UART0_OP函数如下:
& void& UART0_OP (unsigned char opdata){&unsi&&& outputdata=&& ES0=0;&&&&& EA=0;&& SBUF0=&&&&& while(TI0==0);&&&&& TI0=0;&&&&& ES0=1;&& EA=1;}
&&其实,可以把UART0_OP修改成putchar()函数,之后可以用printf等函数直接输出。在单片机编译器的LIB目录下,原有的putchar()函数内容如下:
/*&* putchar (full version):& expands '\n' into CR LF and handles&*&&&&&&&&&&&&&&&&&&&&&&&&& XON/XOFF (Ctrl+S/Ctrl+Q) protocol&*/char putchar (char c)& {
& if (c == '\n')& {&&& if (RI)& {&&&&& if (SBUF == XOFF)& {&&&&&&& do& {&&&&&&&&& RI = 0;&&&&&&&&& while (!RI);&&&&&&& }&&&&&&& while (SBUF != XON);&&&&&&& RI = 0; &&&&& }&&& }&&& while (!TI);&&& TI = 0;&&& SBUF = 0x0d;&&&&&&&&&&&&&&&&&&&&&&&& /* output CR& */& }& if (RI)& {&&& if (SBUF == XOFF)& {&&&&& do& {&&&&&&& RI = 0;&&&&&&& while (!RI);&&&&& }&&&&& while (SBUF != XON);&&&&& RI = 0; &&& }& }& while (!TI);& TI = 0;& return (SBUF = c);}
#if 0&&&&&&&& // comment out versions below
/*&* putchar (basic version): expands '\n' into CR LF&*/char putchar (char c)& {& if (c == '\n')& {&&& while (!TI);&&& TI = 0;&&& SBUF = 0x0d;&&&&&&&&&&&&&&&&&&&&&&&& /* output CR& */& }& while (!TI);& TI = 0;& return (SBUF = c);}
/*&* putchar (mini version): outputs charcter only&*/char putchar (char c)& {& while (!TI);& TI = 0;& return (SBUF = c);}
这个函数有3个版本,最后一个函数是最简单的,我进行了如下修改:
&/*&* putchar (mini version): outputs charcter only&*/char putchar (char c)& {& && ES0=0;&&&&& EA=0;&& SBUF0=c;&&&&& while(TI0==0);&&&&& TI0=0;&&&&& ES0=1;&& EA=1;&&}
&然后把其它两个函数设置成不编译模式。将这个函数加入工程文件后,
&前面一段程序可以作如下修改:
&printf(&@:%c %02u-%02u-%02u %02u:%02u:%02u\r\n&, DataBuf[0],&& (unsigned int)DataBuf[4]+2000,(unsigned int)DataBuf[5],(unsigned int)DataBuf[6],&& (unsigned int)DataBuf[7],(unsigned int)DataBuf[8],(unsigned int)DataBuf[9]);
也就是说,修改和加入putchar()函数后,我们可以用printf, puts等函数实现输出。
&& 事实上,只要修改LIB下的getkey, 和putchar函数,让这两个函数实现单个字符的输入和输出,我们就可以用丰富的标准I/O函数实现字符串的输入和输出,而不用去编写专门的字符串输入和输出函数。
& 对学生编写的程序进行全面修改后,编译后的代码少了10%以上,对字符的输出也更加方便和灵活了,也去掉了专门的数组sdata.
转载本文请联系原作者获取授权,同时请注明本文来自陈儒军科学网博客。链接地址:
上一篇:下一篇:
当前推荐数:2
评论 ( 个评论)
扫一扫,分享此博文
作者的精选博文
作者的其他最新博文
热门博文导读
Powered by
Copyright &C语言中自定义函数_Linux编程_Linux公社-Linux系统门户网站
你好,游客
C语言中自定义函数
来源:Linux社区&
作者:john
C语言是一个面向过程的语言,它函数库里的函数是有限的也是比较底层的函数往往不够我的需求,所以C语言可以自定义函数,让编程人员按自己的需求去定义自己想要的函数来更方便的处理数据。
像我们常用的printf,getchar和putchar函数等等都是从C语言的函数库来的,这三个函数都定义都在stdio.h这个头文件中
下边我们先说一下自定义函数的格式和方式
1.声明函数: 声明一个返回整形值的函数ccc,格式如下(函数返回值的类型& 函数名())
int ccc( )&
2.拟定函数的接受值:让ccc函数接受两个整形数值b和c
int ccc(int b, int c)
3.函数体:函数体是将这个函数所接受的数值该如何处理,怎么处理的一个过程,这儿我们就将函数ccc说接受的两个值b和c相加
int ccc(int b, int c)
& & & & & & & & & & &
& & & & & & & & & & &
d = b +& & & & & & & & &
//将b和c的值相加然后赋值给d& & & & & & & & &
4.函数的返回结果:函数的返回结果是返回给所调用它的函数,函数的返回值有return 来返回具体如下
int ccc(int b, int c)
& & & & & & & & & & &
& & & & & & & & & & &
d = b +& & & & & & & & &
//将b和c的值相加然后赋值给d
& & & & & & & & & & &
return d;
5.函数的调用:用一下方式将调用这个ccc函数& &
函数名(函数接受的值1,函数接受的值2)
main(){& & int x = 4, y = 5;& & int SUMY;& & SUMY = ccc(x, y);& & & & & & & & & & & & & & & &
//函数ccc的调用,让x的值赋值给以上ccc函数的接受值b,y赋值给c。然后将b+c后返回给main函数,然后再将相加的值赋值给SUMY& & printf("X + Y = %d\n", SUMY);}
上边就是一个函数声明的基本过程,下边将演示这个函数的调用和执行结果:
[root@CWG hc]# cat hs.c #include &stdio.h&int ccc(int b, int c)& & & & & & & & & & & & & & & & //声明一个函数ccc接受两个int类型的数值分别是b和c{& && & d = b +& && & & & & & & & & & & & & & & & & & & & & &
//经过函数体的运算,将返回d的值给调用者}main(){& & int x = 4, y = 5;& & int SUMY;& & SUMY = ccc(x, y);& & & & & & & & & & & & & & &
//用ccc的函数体运算x和y两个int类型数值的和& & printf("X + Y = %d\n", SUMY);& & & & &
//打印出SUMY的值}
[root@CWG hc]# ./hsX + Y = 9
整体是一个自定义函数的声明定义和调用过程。
相关阅读:
C语言变长数组之剖析
C语言需要注意的问题
C语言位域的使用及其注意点
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款请编程序将“China”译成密码,密码规律是:用原来字母后面第4个字母代替原来的字母。分别用putchar和printf函数输出这5个字符。程序:#include&stdio.h&int main(){char c1='C',c2='h',c3='i',c4='n',c5='a';c1 += 4;c2 += 4;c3 += 4;c4 += 4;c5 += 4;printf("用printf输出密码为:%c%c%c%c%c\n", c1, c2, c3, c4, c5);printf("用putchar输出密码为:");putchar(c1);putchar(c2);putchar(c3);putchar(c4);putchar(c5);printf("\n");return 0;}结果:用printf输出密码为:Glmre用putchar输出密码为:Glmre请按任意键继续.&.&.
以上就介绍了c语言:请编程序将“China”译成密码,分别用putchar和printf函数输出这5个字符。,包括了方面的内容,希望对C/C++教程有兴趣的朋友有所帮助。
本文网址链接:/article/detail_311427.html
上一篇: 下一篇:&&/&&&&/&&&&/&&&&/&&
C++还保留了C语言中用于输入和输出单个字符的函数,使用很方便。其中最常用的有getchar函数和putchar函数。
putchar函数(字符输出函数)
putchar函数的作用是向终端输出一个字符。例如:
& & putchar(c);
它输出字符变量c的值。
【例3.2】输出单个字符。
#include &iostream&
//或者包含头文件stdio.h:#include &stdio.h&
int main( )
char a,b,c;
a='B';b='O';c='Y';
putchar(a);putchar(b);putchar(c);putchar('\n');
putchar(66);putchar(79);putchar(89);putchar(10);
运行结果为
可以看到:用putchar可以输出转义字符,putchar('\n')的作用是输出一个换行符,使输出的当前位置移到下一行的开头。putchar(66)的作用是将66作为ASCII码转换为字符输出,66是字母'B'的ASCII码,因此putchar(66)输出字母'B'。其余类似。putchar(10)中的10是换行符的ASCII码,putchar(10)输出一个换行符,作用与putchar('\n') 相同。
也可以输出其他转义字符,如
& & putchar('\101'); &(输出字符'A',八进制的101是'A'的ASCII码)
& & putchar('\''); &(输出单引号字符')
& & putchar('\015'); &(输出回车,不换行,使输出的当前位置移到本行开头)
getchar函数(字符输入函数)
此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一般形式为getchar( )函数的值就是从输入设备得到的字符。
【例3.3】输入单个字符。
#include &iostream&
int main( )
c=getchar( ); putchar(c+32); putchar('\n');
在运行时,如果从键盘输入大写字母'A'并按回车键,就会在屏幕上输出小写字母'a'。
请注意,getchar( )只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。例如,例3.3第5行可以用下面一行代替:
& & putchar(getchar()+32);putchar('\n');
因为getchar( )读入的值为'A','A'+32是小写字母'a'的ASCII码,因此putchar函数输出'a'。此时不必定义变量c。
也可用cout输出getchar函数得到字符的ASCII的值:
& & cout&&getchar( );
这时输出的是整数97,因为用getchar( )读入的实际上是字符的ASCII码,现在并未把它赋给一个字符变量,cout就按整数形式输出。如果改成
& & cout&&(c=getchar( )); &//设c已定义为字符变量
则输出为字母'a',因为要求输出字符变量c的值。
可以看到用putchar和getchar函数输出和输入字符十分灵活方便,由于它们是函数所以可以出现在表达式中,例如
& & cout&&(c=getchar( )+32);

我要回帖

更多关于 c语言函数 的文章

 

随机推荐