【C++造神计划】printf 与 cout

C Style

在 C 语言中,没有专门的输入输出语句,所有的输入输出操作都是通过对标准输入输出库函数(包含在 stdio.h 头文件中)的调用实现。最常用的输入输出函数有

  • printf()

  • scanf()

printf()

按格式化字符串输出

cpp 复制代码
printf("%[标志][最小输出宽度][.精度][类型]",输出项列表)

Type 类型

整型

  • d/ld: int/long int, 输出十进制有符号整数

  • o/O: unsigned int, 输出八进制无符号整数

  • x/X: unsigned int, 输出十六进制无符号整数

cpp 复制代码
#include <stdio.h>
int main()
{
    printf("%d\n", 33); 
    printf("%D\n", 33); 

    printf("%o\n", 33);
    printf("%O\n", 33);

    printf("%x\n", 33);
    printf("%X\n", 33);


    printf("%ld\n", 10208489003884);
    return 0;
}

浮点型

  • f/lf: float/double, 单精度/双精度

  • e/E: double, 科学计数法

cpp 复制代码
#include <stdio.h>
int main()
{
    printf("%f\n", 3.1415916); 
    printf("%lf\n", 3.1415916);
    printf("%e\n", 0.00000314159267366487);
    printf("%E\n", 0.00000314159267366487);

    return 0;
}

字符/字符串

  • c: char, 字符型

  • s: char*, 字符串, 以空字符 '\0' 结尾

cpp 复制代码
#include <stdio.h>
int main()
{
    printf("%c\n", 'a');
    printf("%s", "Hello World\n");
    return 0;
}

指针

  • p: 输出 16 进制的指针地址
cpp 复制代码
#include <stdio.h>
int main()
{
    int a = 10;
    printf("address of a: %p\n", &a);

    return 0;
}

精度

Example

cpp 复制代码
#include <stdio.h>
int main()
{
    float a = 3.1415926;   
    float b = 0.0018004887367;   
    printf("%.2f\n", a);
    printf("%.3f\n", a);
    printf("%.5f\n", b);

    printf("%e\n", b);
    printf("%.4E\n", b);
    
    return 0;
}

标志

  • -: 左对齐,右边填空格(默认是右对齐,左边填空格)

  • #: Type 为 o、O、x、X 时,增加前缀0、0x、0X

  • *: 用 * 代替 精度/最小输出宽度,需要在输出列表给出

Example: -

cpp 复制代码
#include <stdio.h>
int main()
{
    float a = 3.1415926;   
    float b = 0.0018004887367; 

    printf("%6.2f\n", a); // 输出宽度 6, 保留 2 小数点
    printf("%6.3f\n", a); // 输出宽度 6, 保留 3 小数点

    printf("%-6.2f\n", a); // 靠左对齐, 输出宽度 6, 保留 2 小数点
    printf("%-6.3f\n\n", a); // 靠左对齐, 输出宽度 6, 保留 3 小数点

    printf("%14e\n", b); // 输出宽度 14
    printf("%14.4E\n", b); // 输出宽度 14, 保留 4 位小数

    printf("%-14e\n", b);
    printf("%-14.4E\n\n", b);

    // 控制字符串最小输出宽度
    printf("%-5s: %d bytes.\n", "int", sizeof(int));
    printf("%-5s: %d bytes.\n", "char", sizeof(char));
    printf("%-5s: %d bytes.\n\n", "float", sizeof(float));

    printf("%5s: %d bytes.\n", "int", sizeof(int));
    printf("%5s: %d bytes.\n", "char", sizeof(char));
    printf("%5s: %d bytes.\n", "float", sizeof(float));

    return 0;
}

Example: #

cpp 复制代码
#include <stdio.h>
int main()
{
    printf("%o\n", 65);
    printf("%O\n", 65);
    printf("%x\n", 65);
    printf("%X\n\n", 65);

    printf("%#o\n", 65);
    printf("%#O\n", 65);
    printf("%#x\n", 65);
    printf("%#X\n", 65);

    return 0;
}

scanf ()

  • 从键盘输入取得数据,所获得的数据按指定输入格式被赋给相应的输入项。
  • 修饰符: 可选,表示输入字段宽度(数字)、约定整数是否是长整型(l)

  • 格式字符数据类型

<div align=center

<image src="imgs/scanf.png" width=500>

</div>

  • 输入项列表

    • 一个或多个变量地址,变量地址有多个时,用逗号","分隔

    • 变量要加取地址操作符 &, 只有这样函数才能改变其值

    • 输入类型与变量类型应尽量一致,以避免类型不匹配而造成的错误

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
    // 示例1:
    long a;            //声明一个长整型变量
    scanf("%9ld", &a); //输入一个字段宽度为 9 位有效数字的十进制长整型数据,保存在变量a中

    /*程序运行时,会要求在终端上输入数据,输入后按 Enter 键,程序继续运行。假如输入的数据是 1234567890,那么前 9 位数字将作为有效的输入,变量 a 保存的数值为 123456789。*/

    // 示例2:
    int a, b, c; //声明 3个整型变量
    //输入3个整型数据,分别保存在变量 a、b、c中, 注意用逗号隔开
    scanf("%d, %d, %d", &a, &b, &c); 
    printf("%d, %d, %d\n", a, b, c);
}

C++ Style

C++ 的 iostream 函数库

  • cout 标准输出流,通常被定向到屏幕

  • cin 标准输入流,通常被定向到键盘

  • *cerr 专门用来显示出错信息,可以被重新定向到标准输出设备

  • *clog 专门用来显示出错信息,可以被重新定向到一个日志文件(log file)

cpp 复制代码
#include <iostream>

std :: cout

  • 输出流 cout 与运算符 << 一起使用

示例

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
    int x = 10;
    int age = 21;
    int zipcode = 88888;
    cout << "output sentence";
    cout << 120;  
    cout << x;     
    cout << "Hello, I am " << age 
         << " years old and my zipcode is " << zipcode;
}

cout 并不会在末尾加换行符,换行符可以写作\n,也可以用操作符 endl 来换行

示例

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
    cout << "First sentence.\n";
    cout << "Second sentence.\nThird sentence.";
    cout << "First sentence." << endl;
    cout << "Second sentence." << endl;
}

cout.precision()

输出流 cout 的一个格式控制函数,是在 iostream 中的一个成员函数。precision()返回当前的浮点数的精度值,而 cout.precision(val) 其实就是在输出的时候设定输出值以新的浮点数精度值显示,即小数点后保留 val 位

cpp 复制代码
float val = 3.1415926
cout.precision(3) // 后面的输出保留3位数
cout << val << endl;

std :: cin

  • cin 后面必须跟一个变量以便存储读入的数据

  • 使用 cin输入的时候必须考虑后面的变量类型

示例

cpp 复制代码
#include <iostream>
using namespace std;

int main ()
{
    int a, b, c;

    cin >> a ;
    cout << "a: " << a << endl;
    // 输入时,两个变量之间可以以任何有效的空白符号间隔,包括空格、跳跃符(tab)或换行符。
    cin >> b >> c;
    cout << "b: " << b << endl;
    cout << "c: " << c << endl;
    return 0;
} 
相关推荐
Niuguangshuo6 分钟前
自编码器与变分自编码器:【2】自编码器的局限性
pytorch·深度学习·机器学习
摘星编程11 分钟前
CANN内存管理机制:从分配策略到性能优化
人工智能·华为·性能优化
likerhood18 分钟前
3. pytorch中数据集加载和处理
人工智能·pytorch·python
Robot侠19 分钟前
ROS1从入门到精通 10:URDF机器人建模(从零构建机器人模型)
人工智能·机器人·ros·机器人操作系统·urdf机器人建模
haiyu_y20 分钟前
Day 46 TensorBoard 使用介绍
人工智能·深度学习·神经网络
阿里云大数据AI技术25 分钟前
DataWorks 又又又升级了,这次我们通过 Arrow 列存格式让数据同步速度提升10倍!
大数据·人工智能
做科研的周师兄26 分钟前
中国土壤有机质数据集
人工智能·算法·机器学习·分类·数据挖掘
IT一氪27 分钟前
一款 AI 驱动的 Word 文档翻译工具
人工智能·word
lovingsoft30 分钟前
Vibe coding 氛围编程
人工智能
深盾科技35 分钟前
融合C++与Python:兼顾开发效率与运行性能
java·c++·python