zoukankan      html  css  js  c++  java
  • C(C++)输入输出格式

    c&c++输入输出控制格式

    许多情况下,都需要控制输出结果的表现形式。如输出宽度、输出精度、输出格式等。C++的iomanip.h中定义了许多控制符,这些控制符可以直接插入到流中,控制数据的输出格式。控制符有两种:控制常量和控制函数,控制常量定义在iostream.h中,控制函数定义在iomanip.h中。

    常用控制符在iostream.h中,函数控制符在iomainip.h中。

    控制符                                      描述

    dec                                        10进制

    hex                                        16进制

    oct                                         8进制

    setfill(c)                               设填充字符为c

    setprecision(n)                     设置显示小数精度为n位

    setw(n)                               设域宽为n个子符

    setiosflags(ios::fixed)           小数方式表示

    setiosflags(ios::scientific)       指数表示

    setiosflags(ios::left)              左对齐

    setiosflags(ios::right)            右对齐

    setiosflags(ios::skipws)         忽略前导空白(用于输入)

    setiosflags(ios::uppercase)            16进制数大写输出

    setiosflags(ios::lowercase)             16进制数小写输出

    注意:除了setw(n)控制符之外,其他控制符对后面的所有输出起控制作用,直到改变输出格式为止。

    例1、输出8进制和16进制数

    常量dec、hex和oct用来控制必须按10进制、16进制或8进制形式输出。

    1 #include<iostream>
    2 using namespace std; 
    3 int  main()
    4 {
    5     int  number=15;
    6     cout<<dec<<number<<"
    "<<hex<< number<<"
    "<<oct<<number<<"
    ";
    7     return 0;
    8 }

    结果为:

    15
    f
    17

    注意:由于这三个标识符已经被定义为系统常量,注意不能在定义为其他变量使用。

    上面这段代码没有加#include<iomanip>也能正确运行,但是假如想下面这一段代码使用了setw就要加这个类引用了。

    例2、设置值的输出宽度

    函数setw(n)用来控制输出宽度,如果数据实际宽度大于设置宽度,将按实际宽读输出;如果设置宽度大于实际输出宽度,数据输出时将在前面补相应数量的空格。另外,该控制符只对一次输出起作用。

    1 #include <iostream>
    2 #include <iomanip>
    3 using namespace std; 
    4 int  main( )
    5 {
    6    int number=1234;
    7    cout<<setw(5)<<number<<setw(5)<<564<<endl;
    8    return 0;
    9 }

    运行结果:

    _1234_ _564

    例3、设置填充字符

    setfill(c)函数用来设置填充的字符,默认情况下为空格。

    1 #include <iostream>
    2 #include <iomanip>
    3 using namespace std; 
    4 int main()
    5 {
    6    int  number=1234;
    7    cout <<setfill('*')<<setw(5)<<number<<endl;
    8    return 0;
    9 }

    输出结果:

    *1234

    例4、设置对齐格式

    函数setiosflags(ios::left)和setiosflags(ios::right)用来控制输出左右对齐格式。当数据实际宽度小于输出宽度时该控制才起作用。默认情况下数据输出是右对齐。

     1 #include<iostream>
     2 #include<iomanip>
     3 using namespace std; 
     4 int  main()
     5 {
     6     int  number=1234;
     7     cout<<setiosflags(ios::left)<<setfill('*')<<setw(6)<<number<<endl;
     8     cout<<setiosflags(ios::right)<<setfill('*')<<setw(6)<<number<<endl;
     9     return 0;
    10 }

    输出结果:

    1234**

    **1234

    例5、控制浮点数显示

    函数setprecision(n)可用来控制输出流显示浮点数的数字个数(整数部分加小数部分)。

    c++默认的流输出数值的有效位是6。当小数截短显示时,进行四舍五入处理。

    函数setiosflags(ios::fixed)用来控制符点数是按纯小数方式显示。系统默认为纯小数方式输出。

    函数setiosflags(ios::scientific)用来控制符点数是按科学记数法方式显示。

    函数setiosflags(ios::showpoint) 用来强制显示小数点和符号。

     1 #include<iostream>
     2 #include<iomanip>
     3 using namespace std; 
     4 int main()
     5 {
     6     const float  x=20.0/7,y=18.0/6;
     7     
     8     cout<<"x:
    ";
     9     cout<<x<<endl;
    10     cout<<setiosflags(ios::scientific)<<x<<endl;
    11     cout<<setiosflags(ios::fixed)<<x<<endl;
    12     
    13     cout<<"
    y:
    ";
    14     cout<<y<<endl;
    15     cout<<setiosflags(ios::showpoint)<<y<<endl;
    16     return 0;
    17 }

    输出结果为:

    2.85714         (默认6位,整数部分加小数部分)

    2.857143e+000        (默认6位,指小数部分)

    3              (默认0不输出)

    3.00000         (强制输出0)

    标准输入输出函数printfscanf

    在程序设计中输入输出是不可缺少的内容,因此在C语言中提供了printf与scanf标准函数来满足输入输出要求。需要说明的是,在C++中提供了更方便的输入输出控制,这就是I/O流。但为了满足一些对printf与scanf使用习惯的要求,C++中仍保留了这两个函数。

    <1>、printf函数

    格式:

    printf (格式控制字符串,输出项1,输出项2,…)

    说明:

    (1)格式控制字符串决定了数据输出的结果。它由“格式说明字符”和“普通字符”组成。普通字符按原样输出,格式说明字符将对应输出数据转换成指定的格式输出。格式控制字符串的形式为:

    %[域宽]格式字符

    域宽部分是可选的,每个格式说明对应于一个输出参数,该参数被转换成由格式说明规定的数据格式后输出。

    例如:

     1 #include <iostream>
     2 #include <iomanip>
     3 using namespace std; 
     4 int main()
     5 {
     6     int a=10;
     7     float b=-5.2;
     8     printf("a=%d,b=%8.3f
    ",a,b);
     9     return 0;
    10 }

    输出结果如下:

    a=10,b=  -5.200

    (2)格式说明字符及其规定的输出格式

    printf的格式说明字符见下表

    格式说明符     参数类型     输出格式

    d,I            int           十进制整数

    o              int           八进制数(无前导0)

    x,X           int           十六进制数(无前缀0x或0X)

    u              int            无符号十进制数

    c              int            单个字符

    s              char *       字符串(必须以’’结束或给定长度)

    f               double      小数形式的的浮点数(小数位数由精度决定,缺省为6位)

    e,E           double       标准指数形式的浮点数(小数位数由精度决定,缺省为6位)

    %             不转换        输出一个%

    域宽说明字符      意义

    -                 在指定的区域内以左对齐方式输出(无’-’号时为右对齐)

    +                 输出正值时前面冠以符号+

    空格              输出的第一个字符不是符号时,要输出一个空格做前缀

    0(零)           在域宽范围内用前导0填补空位

    #                 对于o格式输出前导0,对于x或X输出0x或0X前缀。

    m(正整数)         指出输出数据的最小宽度。

    .(小数点)          分隔域宽与精度,小数点前面可以没有与宽说明

    n(正整数)          数据输出的精度即小数部分的位数,

    h                 指出输出数据是短整型

    l                  指出输出数据是长整型

    L                  指出输出数据是高精度浮点型(long double)

     

    例1

    1 #include<stdio.h>
    2 int main()
    3 {
    4     int a=10;
    5     float b=-5.2;
    6     printf("a=%#o,b=%08.3f",a,b);
    7     return 0;
    8 }

    输出结果为:

    a=012,b=-008.200

     

    例2

    1 #include<stdio.h>
    2 int main()
    3 {
    4     int a=28,b=38;
    5     long c=289868;
    6     printf("%5d,%5d
    %ld
    ",a,b,c);
    7     printf("%3ld
    %7ld
    %d
    ",c,c,c);
    8     return 0;
    9 }

    结果:

    28,   38

    289868

    289868

     289868

    289868 //16位机输出27724

     

    例3

    1 #include<stdio.h>
    2 int main()
    3 {
    4     int a=-3;
    5     printf("%d,%o,%x,%X,%6x
    ",a,a,a,a,a);
    6     return 0;
    7 }

    在16位机上输出结果为:

    -3,177775,fffd,FFFD,fffd

    在32位机上输出结果为:

    -3,37777777775,fffffffd,FFFFFFFD,fffffffd

     

    例4

    1 #include<stdio.h>
    2 int main()
    3 {
    4     char ch='a';
    5     int a=65;
    6     printf("%c,%d,%3c
    ",ch,ch,ch);
    7     printf("%c,%d,%3d
    ",a,a,a);
    8     return 0;
    9 }

    输出结果为:

    a,97,  a

    A,65, 65

     

    例5

    1 #include<stdio.h>
    2 int main()
    3 {
    4     printf("%3s,%-5.3s,%5.2s
    ","hello","hello","hello");
    5     return 0;
    6 }

    输出结果为:

    hello,hel  ,   he

    说明:第一个"hello"按%3s输出,由于"hello"长度超过3,因此按实际长度输出。第二个"hello"输出宽度为5,且从前面截取3个字符左对齐输出,第三个"hello"的输出宽度仍为5,从"hello"中截取2个字符右对齐输出。

     

    <2>scanf函数

    一般形式:

        scanf(格式控制字符串,地址1,地址2,…);

    说明:格式控制字符串同前面的printf函数。地址是指变量的地址,格式是变量的前面加&符号。

    例如:

    1 #include<stdio.h>
    2 int main()
    3 {
    4     int i;
    5     printf("please input i:
    ");
    6     scanf("%d",&i);
    7     printf("i=%d
    ",i);
    8     return 0;
    9 }

    变量的定义与初始化

    看下面例子:

     1 #include<iostream>
     2 using namespace std;
     3 int  main()
     4 {
     5     int  num;
     6     char  ch='a';
     7     for (num=ch;num<='z';num++)   
     8         cout<<num<<",";
     9     return 0;
    10 }

    程序输出什么结果?

    答:将输出97,98,...,122

     

    在c++中,任何一个变量在被引用之前必须被定义。

    c++中变量可以在程序中随时定义,不必集中在程序之前。

    定义格式:

    〈类型〉〈变量名表〉;

    当有多个变量时,其间用逗号隔开。

    例如:

    int  i,j,k;
    float  x,y,z;
    char  c1,c2,c3;

    注意:在同一个内存块中不允许定义同名变量,即不允许重复定义一个变量。

    变量在定义时可直接给变量一个初始值,称为变量初始化。变量初始化也可放在需要的时候进行。变量被初始化后其值将保存到被改变为止。变量定义以后,如果没有被初始化,并不意味着这个变量中没值,该变量中要么是默认值,要么是无效值。在后面将要讲到,对外部和静态变量定义后其默认值对int型的为0,对浮点型的为0.0;对char型为空。而其他内部变量未初始化时其值是无效的,这是因为该变量所在地址中的内容是先前保留下来的无意义的值。在定义变量时可一次初始化多个变量。

    例如:

    float  x,y=3.14,z=0.0;

    char  ch1='a', ch2=' ';

    这里,y,z,ch1,ch2在定义的同时就进行了初始化。

    而x只是做了变量说明并没有赋初值。

     

  • 相关阅读:
    with admin option 和 with grant option 的区别 (转)
    压缩数据块
    建表时pctfree和pctused参数作用
    Oracle哪些错误会写进alert日志
    Oracle 差异、增量、零级备份
    模拟原生的promise
    react-loadable 实现组件按需加载
    react 中配置 http-proxy-middleware
    craco 配置 less.module
    ESLint: 'React' was used before it was defined.(no-use-before-define)
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3833929.html
Copyright © 2011-2022 走看看