【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;
} 
相关推荐
橙子小哥的代码世界6 分钟前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
是小崔啊7 分钟前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
tianmu_sama13 分钟前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
黄公子学安全16 分钟前
Java的基础概念(一)
java·开发语言·python
liwulin050617 分钟前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc21 分钟前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Oneforlove_twoforjob26 分钟前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言
羚羊角uou28 分钟前
【C++】优先级队列以及仿函数
开发语言·c++
姚先生9732 分钟前
LeetCode 54. 螺旋矩阵 (C++实现)
c++·leetcode·矩阵
FeboReigns34 分钟前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++