Skip to main content

IO控制

·396 words·2 mins· loading
Raven005
Author
Raven005
A little bit about you
Table of Contents

std::cout
#

控制符
#

#include <iomanip>

控制符描述
dec置基数为10
hex置基数为16
oct置基数为8
setfill(char)设置填充字符为c
setw(n)设置显示小数精度为n位
fixed固定浮点数显示
scientific指数表示
left左对齐
right右对齐
skipws忽略前导空白
uppercase十六进制数大写输出
lowercase十六进制数小写输出

控制浮点数值显示
#

#include <iostream>
#include <iomanip>
int main() {
    const double e = 2.718281828;
    // setprecision控制浮点数数字个数
    // fixed控制小数点右边个数
    // scientific用科学计数法表示浮点数
    std::cout << "10位有效位数: " << std::setprecision(10) << e << std::endl;
    std::cout << "定点方式(8位小数位): " << std::fixed << std::setprecision(8) << e << std::endl; std::cout << "指数形式(8位小数位): " << std::scientific << std::setprecision(8) << e << std::endl;
    return 0;
}

设置值的输出宽度
#

如果一个值的显示数需要比setw(n)确定的字符数n更多,则该值将显示所有字符,例如

#include <iostream>
#include <iomanip>

int main() {
    float amount = 3.14159;
    std::cout << std::setw(4) << amount << std::endl;
    return 0;
}

如果一个值的字符数比setw(n)确定的字符个数更少,则在数字字符前显示空白。不同于其他控制符,setw(n)只影响下一个数值输出,如果要每一个数字都受到setw(n)控制,需要这样:

#include <iostream>
#include <iomanip>
int main() {
    double pi       = 3.1415926;
    int radius_1    = 40;
    double radius_2 = 928.335;

    // 为了对齐,setw的值要设置为最长字符串的值
    std::cout << std::left << std::setw( 15 ) << "size of double " << std::right
              << std::setw( 5 ) << sizeof( pi ) << " bytes" << std::endl;
    std::cout << std::left << std::setw( 15 ) << "size of int " << std::right
              << std::setw( 5 ) << sizeof( radius_1 ) << " bytes" << std::endl;

    return 0;
}

输出八进制数和十六进制数
#

#include <iostream>
#include <iomanip>

int main() {
    int num = 1001;
    std::cout << "Decimal: " << std::dec << num << std::endl;
    std::cout << "Hexadecimal: " << std::hex << num << std::endl;
    std::cout << "Octal: " << std::oct << num << std::endl;
    return 0;
}

设置填充字符
#

#include <iostream>
#include <iomanip>

int main() {
    std::cout << std::setfill('*');
    std::cout << std::setw(2) << 21 << std::endl << std::setw(3) << 21 << std::endl << std::setw(4) << 21 << std::endl;
    std::cout << std::setfill(' '); // NOTE: 恢复默认设置
    return 0;
}

左右对齐输出
#

#include <iostream>
#include <iomanip>
using std::setw;

int main() {
    std::cout << std::right; // NOTE: 右对齐
    std::cout << setw(4) << 1 << setw(4) << 2 << setw(4) << 3 << std::endl;

    std::cout << std::left; // NOTE: 左对齐
    std::cout << setw(4) << 1 << setw(4) << 2 << setw(4) << 3 << std::endl;
    return 0;
}

强制显示小数点和符号
#

当遇到浮点数除以整数可以整除时会简单显示整数位,忽略小数位

#include <iostream>
#include <iomanip>

int main() {
    std::cout << 10.0 /5 << std::endl;
    std::cout << std::showpoint << 10.0 / 5 << std::endl;
    return 0;
}

默认时,IO仅在负数之前显示值的符号

#include <iostream>
#include <iomanip>

int main() {
    std::cout << 10 << " " << -20 << std::endl;
    std::cout << std::showpos << 10 << " " << -20 << std::endl;

    return 0;
}