• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

嵌入式步骤14 ——自定义变量和常量参数(定义、输入、输出)摘要


Recommended Posts

变量和常量可以在语言中自定义,这样每次使用这个量的时候都可以直接输入。自定义常量名称可以减少输入过程中的错误,减少输入工作量。自定义变量名,可以在任何地方引用。

在C语言中,变量名可以由英文字母、数字和下划线组成。一般使用带变量名的英语。单词多的时候用下划线隔开,有列表的时候用数字区分。变量名不能以数字开头,只能以字母或下划线开头。变量名区分大小写。传统上,变量是小写的,常量是大写的。

变量名和常量名应避免使用编程语言中定义的名称,这些名称也称为关键字。ANSI C中定义了32个关键字,C99标准中定义了5个关键字,C11标准中定义了7个关键字。总共有44个关键字不能用作变量名。该列表如下:

ansi standard:auto break case char const continue default do double else enum extern float for goto if int long register return short signed size of static struct switch typedef union unsigned void volatile while

C99标准:内联restrict _ bool _ complex _ imaginary

C11标准:_ alignas _ align of _ at onic _ static _ assert _ no return _ thread _ local _ generic

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

Char数据占用一个字节的8位,在定义常量时可用于符号,也可用于表示-128到127之间的值。

Unsigned char无符号字符数据占用8位,可以用来定义符号,或者在定义常量时用来表示0~255。

Int取32位,用于表示-2147483648和2147483747之间的值。

short integer占用16位,用来表示-32768到32768之间的值。

无符号短整型无符号短整型占用16位,用于表示0到65535之间的值。

Unsigned int unsigned integer占用32位,用于表示0到4294967295之间的值。

Long占用32位,用于表示-2147483648和2147483747之间的值。

无符号长整型占用32位,用来表示0到4294967295之间的值。

float单精度浮点类型在float.h库中。

双精度浮点类型在float.h库中。

声明变量:

int a;

char b;

浮动c;

双d;

int a=520

char b=' F

打印格式函数和格式声明

标准输出功能:

# includestdio.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,这是不会实现的。

Link to comment
Share on other sites