头文件

 

输出输入格式控制


基本格式字符 

  • %d 按十进制整数型数据的实际长度输出
  • %i 作用与d格式字符相同
  • %c 用来输出一个字符 
  • %s 用来输出一个字符串
  • %f 用来输出实数 (含有6位小数)
  • %e 用指数形式输出(例:  123.456 的指数形式为:    1.234560 e+002)

复杂格式字符

  • %md m是指宽度,如果数位不够,左端以空格补出,如果大于位数m,按实际位数输出
    int a,b;
    a=123;
    b=12345;
    printf("%4d,%4d\n",a,b); //输出a=  123,b=12345
  • %ld 是输出长整形数据的格式,占2字节的系统
  • %0 以8进制整数形式输出(不带负号)
  • %x 以十六进制整数形式输出(不带负号)
  • %u 用来输出无符号型数据(unsigned)以十进制整数形式输出
  • %mc m指宽度 输出的字符不够左补空格
  • %m.ns m指字符串占n列,n表示只取字符串左端的n个字符,不够左补空格(m>n)
  • %m.nf 指输出的数共占m列,其中有n位小数,如果数值长度小于m,则左补空格,若m为负值则右补空格
  • %m.ne n指输出的数据的小数部分的小数位数 m为宽度
  • %g 用来输出实数,它根据数值的大小自动选f格式或e格式,且不输出无意义的0,
  • %ld %lo %lx %lu 中l表示long,输出为长整型数据
  • %lf %le 输出double型数据
  • %hd %hx %ho 输出短整型数据 

基本输入输出


printf 格式输出

格式: int printf( const char *format [, argument]... );

参数:

  • format:
    • 说明:
      • 是用双引号括起来的一字符串<"转换控制字符串"或"格式字符串">
    • 组成:
      • 格式声明:由"%"和格式字符组成
      • 普通字符:需要原样输出地字符
  • argument: 是需要输出的一些数据,可以是常量,变量或者表达式

sprintf 格式字符串

格式:int sprintf(char*string,char*format[,argument]... )

作用: 格式化一个字符串输出到字符数组中

参数:

  • string: 存放格式话后字符串的字符数组
  • format:
    • 说明:
      • 是用双引号括起来的一字符串<"转换控制字符串"或"格式字符串">
    • 组成:
      • 格式声明:由"%"和格式字符组成
      • 普通字符:需要原样输出地字符
  • argument:是需要输出的一些数据,可以是常量,变量或者表达式

注意:

  • VC 的默认是 4 个字节对齐,就是当开辟一个不足四个字节的数组时,会为此数组分配 4 个字节的空间
  • 在函数调用的过程中,是先将函数参数压入栈中,然后将函数调用完之后需要返回的地址压入栈中;在函数调用的过程中,还会有局部变量被压入栈中。当向赋值时数组超过数组的长度时,就会覆盖函数返回址,所有当函数用完就会出错

缺点: 使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误

例子:

#include 
#include
using namespace std;
void main()
{
    char* who = "I";
    char* whom = "CSDN";
    char s[20];
    sprintf(s,"%s love %s.",who,whom); //产生:"I love CSDN. "
    printf("%s\n",s);
    system("pause");
}

  输出结果:

I love CSDN.
请按任意键继续. . .

swprintf 宽字符格式输出

格式: int swprintf( wchar_t *buffer, const wchar_t *format [, argument] ... );

参数: 同上

_snprintf 格式输出

格式: int _snprintf(char *str, size_t size, const char *format[,argument]...);

作用: 格式化一个字符串输出到字符数组中

参数:

  • str: 存放格式话后字符串的字符数组
  • size: 该格式化后字符串最大可以赋给字符串的长度
  • format:
    • 说明:
      • 是用双引号括起来的一字符串<"转换控制字符串"或"格式字符串">
    • 组成:
      • 格式声明: 由 "%" 和格式字符组成
      • 普通字符: 需要原样输出地字符
  • argument: 是需要输出的一些数据,可以是常量,变量或者表达式

注意:

  • 如果格式化后的字符串长度 < size, 则将此字符串全部复制到 str 中,并给其后添加一个字符串结束符('\0');
  • 如果格式化后的字符串长度 >= size, 则只将其中的(size-1)个字符复制到 str 中,并给其后添加一个字符串结束符('\0')

_snwprintf 宽字符格式输出

格式: int _snwprintf( wchar_t *buffer, size_t count, const wchar_t *format [, argument] ... );

参数: 同上

scanf 格式输入

格式: int scanf( const char *format [,argument]... );

参数:

  • format: 由"%"和格式字符组成,然后在由在双引号中
  • argument :由"&"地址符与变量名构成, "&变量名"是指变量在内存中的地址

sscanf 格式输入

格式: int sscanf( const char *buffer, const char *format [, argument ] ... );

作用: 格式化一个字符串输出到其输出列表的元素中

参数:

  • buffer:用来格式输出的字符数组
  • format:由"%"和格式字符组成,如果是多个中间由符号(除了"%")分开,然后在由在双引号中
  • argument:由"&"地址符与变量名构成, "&变量名"是指变量在内存中的地址

注意:

  • %[*] [width] [匹配样式]type
    • 亦可用于格式中, (即 %*d 和 %*s) 加了星号(*)表示跳过此数据不读入. (也就是不把此数据读入参数中)
      #include
      using namespace std;
      void main()
      {
          int i= 0; 
          int j = 0;
          char s[20];  
          char input[]="10 0x1b aaaaaaaabbbbbbbb"; 
          sscanf(input,"%d %*x %10[a-z]s",&i,s); //遇到 * 跳过匹配即跳过了 0x1b 这个数据
          printf("%d %d %s \n",i,j,s); 
          system("pause");
      }
      /**************************************
      输出结果:
      10 0 aaaaaaaabb
      请按任意键继续. . .
      **************************************/
    • 支持转换成字符串的集合操作:
      • %[a-z]表示匹配a到z中任意字符,贪婪性(尽可能多的匹配) (要多个匹配时候%[a-z1-9A-B])
        #include
        using namespace std;
        void main()
        {
            int i= 0; 
            int j = 0;
            char s[20];  
            char input[]="10 0x1b abcdABCD"; 
            sscanf(input,"%d %x %10[a-z]s",&i,&j,s);//只匹配 a 到 z 的元素遇到其他元素立即停止匹配
            printf("%d %d %s \n",i,j,s); 
            system("pause");
        }
        /*************************************
        输出结果:
        10 27 abcd
        请按任意键继续. . .
        *************************************/
      • %[aB']匹配a、B、'中一员,贪婪性 (字符串第一个字符一定要是a或b不然会有不可预知的后果)
        #include
        using namespace std;
        void main()
        {
            int i= 0; 
            int j = 0;
            char s[20];  
            char input[]="10 0x1b aBzzaAbZ"; 
            sscanf(input,"%d %x %10[aBz]s",&i,&j,s);//遇到非 a,B,z 其中一个离开停止匹配
            printf("%d %d %s \n",i,j,s); 
            system("pause");
        }
        /***********************************
        输出结果:
        10 27 aBzza
        请按任意键继续. . .
        ***********************************/
      • %[^a]匹配非a的任意字符,贪婪性 (a也可以为上两个表达式如a-z或者aB')
        #include
        using namespace std;
        void main()
        {
            int i= 0; 
            int j = 0;
            char s[20];  
            char input[]="10 0x1b aBZZbzza"; 
            sscanf(input,"%d %x %10[^zb]s",&i,&j,s);//遇到 z 或者 b 马上停止匹配
            printf("%d %d %s \n",i,j,s); 
            system("pause");
        }
        /**************************************
        输出结果:
        10 27 aBZZ
        请按任意键继续. . .
        **************************************/
      • width 表示读取宽度
    • 支持转换成数值的集合操作:
      • width 表示读取宽度 (但是使用此属性时候,没读到的那部分数据会被当成一个新的数据)
    • type 为格式字符

例子:

#include
using namespace std;
void main()
{
    int i; 
    unsigned int j;
    char s[20];  
    char input[]="10 0x1b aaaaaaaabbbbbbbb"; 
    sscanf(input,"%d %x %10[a-z]s",&i,&j,s); 
    printf("%d %d %s \n",i,j,s); 
    system("pause");
}

  输出结果:

10 27 aaaaaaaabb
请按任意键继续. . .

swscanf 宽字符格式输入

格式: int swscanf( const wchar_t *buffer, const wchar_t *format [, argument ] ... );

参数: 同上

你可能感兴趣的:(C++头文件,C++,input,system,buffer,string,c)