ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

嵌入式第14步——自定义变量和常量参数汇总(定义、输入、输出)

2022-05-02 21:32:34  阅读:223  来源: 互联网

标签:输出 14 自定义 字符 int 嵌入式 printf 输入 读取


  计算机语言里可以自定义变量和常量,这样在每次用到这个量的时候,可以直接输入。自定义常量名可以减少录入过程中的错误,减少录入工作量。自定义变量名,可以做到在任何想要使用的部位引用。

  在C语言里,变量名可以用英文字母、数字、下划线组成。一般习惯用变量名的英文,单词较多时用下划线隔开,有罗列时用数字区分。变量名开头不能用数字,可以用字母或下划线。变量名区分大小写,传统习惯变量用小写,常量用大写。

  变量名和常量名要避开编程语言内部已经定义的名称,又称关键字。在ANSI C里定义了32个关键字,C99标准定义了5个关键字,C11标准定义了7个关键字,一共44个关键字是不能使用作为变量名的。列表如下:

  ANSI C标准:auto    break    case      char        const      continue       default    do   double    else        enum       extern     float        for   goto       if     int   long              register   return    short      signed    sizeof      static       struct       switch     typedef   union     unsigned              void        volatile    while     

  C99标准:inline   restrict    _bool      _Complex      _Imaginary

  C11标准:_Alignas             _Alignof         _Atonic          _static_assert         _Noreturn             _Thread_local        _Generic

 

C语言可用的数据类型包括:

  char   字符型数据 占用一个字节8位,在定义常量时可以定义符号用,也可以用于表示-128~127之间数值

unsigned char  无符号字符型数据 占位8位,在定义常量时可以定义符号用,也可以用于表示0~255

int    整形  占32位,用于表示-2147483648~2147483747之间数值

shout  短整型  占位16位,用于表示-32768~32768之间数值

unsigned short 无符号短整型 占位16位,用于表示0~65535之间数值

unsigned int  无符号整型 占位32位,用于表示0~4294967295之间数值

long   长整型  占位32位,用于表示-2147483648~2147483747之间数值

unsigned long int 占位32位,用于表示0~4294967295之间数值

float 单精度浮点型     在<float.h>库里

double  双精度浮点型   在<float.h>库里

 

 

声明变量:

   int a;

  char b;

 float c;

 double d;

int a=520;

char b=’F’;

 

格式化输出函数及格式声明

   标准输出函数:

       #include<stdio.h>

       int printf(“ 输出内容及函数格式声明 “,函数列表);

  1、%d  有符号十进制整型数据输出(正数不输出符号),对应int型数据

          例: printf(“a=%d,b=%d\n”a,b);     运行结果:a=3,b=4

    1.1 %md   m为输出宽度,实际位数小于m时,从左侧补充空格。不指定时,按照实际位数输出。具体用法见%x的说明及后面例子。

    1.2 %ld      ld为输出长整型整数,占4个字节。在VC++6.0里,int和long都是分配4个字节,故可以用%d直接输出。

  2、%u  无符号十进制整形数据输出(正数不输出符号),对应unsigned型数据

  3、%o  以八进制无符号形式输出整数(不输出前导符o)

     例1: 

             short int a=-1

            printf(“%d,%o”,a,a);

 

           运行结果: -1,177777

  4、%x  %X  以十六进制无符号形式输出整数(不输出前导符0x),用x则输出十六进制数的a~f时以小写形式输出。用X时,则以大写字母输出。

 

 

       例1:

           short int a=-1

          printf(“%x,%o,%d”,a,a,a);

 

         运行结果:  ffff,177777,-1

      

         例2:

             unsigned short a=65535;

             short int b=-2;

            printf(“a=%d,%o,%x,%u\n”,a,a,a,a);

            printf(“b=%d,%o,%x,%u\n”,b,b,b,b);

 

           运行结果:

                a=-1,177777,ffff,65535

                b=-2,177776,fffe,65534

         例3:

              int a=65535;

             int  b=-2;

             printf(“a=%d,%o,%x,%u\n”,a,a,a,a);

            printf(“b=%d,%o,%x,%u\n”,b,b,b,b);

 

           运行结果:

                a=65535,177777,ffff,65535

               b=-2,37777777776,fffffffe,4294967294

 

  例4:(注意%#的输出区别)    网上抄录来的,不见得运行成功。

            int  a=100

              printf(“a=%d,a=%o,a=%x,a=%#0x”,a,a,a);

 

           运行结果:

                  a=100,a=144,a=64,a=ox64

 

 

  5、%c   输出一个字符。

  5.1  %mc  m用于指定输出字符宽度,不足部分在左侧用空格补充。

    例1: char ch=’a’;

         printf(“%c,cha=%3c”,c,c);                    运行结果:   a   cha=  a

  

 

  6、%s 输出一个字符串

    6.1 %ms  输出一个指定宽度的字符串,超出m部分全部显示,不足部分左侧用空格补充。

    6.2 %-ms 如果串长小于m,则在m列范围内,字符串向左靠,右侧补空格。

    6.3 %m.ns  输出占m个字符,取字符串左端n个字符,输出在m列右侧,在左侧补充空格。

    6.4 %-m.ns输出占m个字符,取字符串左端n个字符,输出在m列左侧,在右侧补充空格。

 

  规律总结:用带数字表示格式时,小数点前为输出时占位数,小数点后为显示的数字数,不带符号(或称+)时,往右放,左边加空格不足。带负号时,往左放,右边加空格补足。

     例1、 char c=‘china’;

               printf(“c=%s  c=%3s  c=%8s  c=%7.2s, c=%.4s,c=%5.3s,c=%-8s,c=%-5.3。),c,c,,c,c,c,c,c,c);

 

            运行结果:

                       c=china,  c=china,  c=   china,c=     ch,c=chin,c=chi  ,c=  chi,c=   china,c=chi  。

 

  7、%f   输出实数,包括单双精度实数。系统一般情况下处理方法:实数中整数部分全部输出,小数部分输出6位。但由于双精度实数有效位数为15~16位,故用%f输出时,整数加小数部分长度有可能超出可以输出的位数,故只输出全部整数和部分小数。

  7.1 %m.nf:指定输出的实数共占m列,其中小数可以显示n位。整个数据往右放,在左侧加空格。

  7.2 %-m.nf: 指定输出的实数共占m列,其中小数可以显示n位。整个数据往左放,在右侧加空格。

   例1:

      float f=123.456;

      printf(“f=%f,  f=%10f,  f=%10.2f, f=%.2f, f=%-10.2f。”,f,f,f,f,f);

 

   运行结果:

          f=123.456, f=123.456    ,f=    123.45, f=123.45, f=123.45    。

 

  8、%e %E  以指数形式输出实数,用e时指数以e表示(如1.2e+002),用E时指数以E表示(如1.2E+002)多数C系统中,指数默认占3位。

    8.1  %m.ne, %-m.ne:  m指定输出数占m列,n指定小数部分位数,不带符号(或称+)时,往右放,左边加空格补足。带负号时,往左放,右边加空格补足。不指定n时,默认n=6

 

  例: float f=123.456

         printf(“f=%e,f=%10e,f=%10.2e,f=%.2e,f=%-10.2e。”,f,f,f,f,f);

 

       运行结果:

             f=1.23456e+002,f=1.23456e+002,f= 1.23e+002,f=1.23e+002,f=1.23e+002 。

 

  9、%g  %G 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0,用G时,若以指数形式输出,则指数以大写表示。用的比较少。

     例:  f=123.456

           printf(“f=%f,,f=%e,f=%g。”,f,f,f);

 

         运行结果:

               f=123.456   ,f=1.23456e+002,f=123.456   。

 

 

 

  格式输入函数及格式声明:

     标准输入函数:

         #inculude<stdio.h>

         ………      

         int scanf(const char *format,……)//*format为格式字符,后面…为读入值赋予的参数。

 

  1、  读取数据时,首先忽略空白字符(包括空格、回车、制表符Tab);

  2、  出了格式占位符(%开头)外的非空白字符:指定函数必须从输入里读取到的字符,如果读取不匹配,则调用失败,并从匹配失败处截断输入流;

  3、  格式化占位符(%开头):用于指明获取的数据类型及位置。

 格式化占位符语法:  %(宽度)(长度)格式字符

   

格式字符内容及含义:

  1、%c   读取一个字符。

  2、%d  读取一个十进制整数,前面可以加上符号(+或-)表示正负。

  3、%i   1)读取一个整数,前面可以加上符号(+或-)表示正负。

                     2)0开头表示八进制数,0x开头表示十六进制数。

       4、%e\E\g\G  读取一个指数形式的单、双精度浮点数。

       5、%f\g\G   读取一个单、双精度浮点数(需要使用lf),前面可以加符号(+或-)表示正负。

       6、%a  读取一个十六进制的浮点数(以0x或0X开头)。

       7、%0  读取一个八进制整数,前面可以加符号(+或-)表示正负。

       8、%s   读取一连串字符,直到遇到空白字符结束。

       9、%u  读取一个无符号的十进制整数。

       10、%x 读取一个无符号的十六进制整数,前面可以加符号(+或-)表示正负。

       11、%p 读取一个指针的值。

       12、%[字符]  1)匹配中括号括起来的字符集

                            2)可以用连接符(-)表示范围,比如[0-9]

       13、%[^字符] 1)匹配中括号括起来的字符集

                            2)可以用连接符(-)表示范围,比如[0-9]

       14、n    1)存放已经读取的字符个数;

                     2)不消耗任何标准输入流的字符。

       15 %    表示匹配%自身。

 

  注1:除了n,其他的每次读取都会至少消耗标准输入流中的一个字符。

  注2:如果读取失败,则标准输入流截断于读取失败的位置。

    注3:*[数字]表示本项读入的数据不计入,或者说是空占位。数字表示空位数量。

 

…参数:

  1、  参数的个数由格式化字符决定。

  2、  每个参数均为一个存储空间,并于前面格式化字符串中占位符的类型和位置一一对应。

  3、  如果这个参数是一个普通变量名,那么需要在变量名前面加上&符号。这意味着这个输入是给这个变量赋值。

 

返回值:

  1、  如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。

  2、  如果函数调用失败,返回值小于附加参数的个数(甚至是0)。

  3、  如果读取到标准输入的结尾处,则返回值EOF。

 

 

  例1:(录自小甲鱼函数解析)

       #include<stdio.h>

       int main()

      {

 

       char c;

    int I;

       int j;

 

      scanf(“%c%d%x”,&c,&I,&j);    //注意输入的格式和参数前要加&。

           printf(“变量c的值是:%\n”,c);

      printf(“变量i的值是:%d\n”,i);

     printf(“变量j的值是:%#x(%d)\n”,j,j);

     }

运行结果:

       输入: A 520  ff

      输出:

           变量C的值是:A

           变量i的值是:520

          变量j的值是0XFF(255)

 

  例2:(录自谭浩强《C语言程序设计》第3版)

  1)       对于unsigned类型变量所需要的数据,可以用%u、%d或%o、%x格式输入。

  2)       可以指定输入数据所占列数(也就是位数),系统会自动按它截取所需数据。

    scanf(“%3d%3d”,&a,&b);

 

   运行输入:123456

  则系统将123赋值给变量a,456赋值给变量b.这个方法也可以用于字符型:

    scanf(“%3c”,&ch);

 

  运行输入:abc

  结果:由于c为获取单个字符,则不论前面数字是多少,只取第一个字符a作为参数ch的值。

  3)如果%后有一个*,怎表示跳过它指定的列数。

       scanf(“%2d%*3d%2d”,&a,&b);

 

     运行输入:12 345 67

  结果:系统将12赋值给参数a,然后根据%*3d要求读入但不赋值3个输入参数,也就是说345被读入,却不赋值,然后将后面的67赋值给参数b。这个赋值方式,很多时候被用于在利用现有的一批数据时,跳过里面不需要的一段数据进行赋值。

  4)赋值过程中,不能规定精度,比如:

     scanf(“&7.2f“,&a);

  这个语句是不合法的,不能企图改变输入值进行赋值。比如输入1234567,企图使赋值为12345.67,这是不会实现的。

标签:输出,14,自定义,字符,int,嵌入式,printf,输入,读取
来源: https://www.cnblogs.com/ty-topic/p/16216907.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有