基本的输入输出

简介

C++ 的 I/O 发生在流中,流是字节序列。

如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作

如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作

IO库头文件

<iostream>

该文件定义了 cin、cout、cerrclog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。

#include <iostream>

标准输入输出库(cincout)

标准输入流cin

预定义的对象 ciniostream 类的一个实例。cin对象附属到标准输入设备,通常是键盘。

cin 是与流提取运算符>>结合使用的

int num;
cin >> num;

C++ 编译器根据要输入值的数据类型,选择合适的流提取运算符来提取值,并把它存储在给定的变量中。

流提取运算符 >> 在一个语句中可以多次使用,如果要求输入多个数据,可以使用如下语句:

cin >> name >> age;

效果等同于

cin >> name;
cin >> age;

标准输出流cout

cout 对象"连接"到标准输出设备,通常是显示屏。

cout 是与流插入运算符 << 结合使用的,如下所示:

cout << "Hello World!" << endl;

C++ 编译器根据要输出变量的数据类型,选择合适的流插入运算符来显示值。

<< 运算符被重载来输出内置类型(整型、浮点型、double 型、字符串和指针)的数据项。

流插入运算符 << 在一个语句中可以多次使用,如上面实例中所示,endl 用于在行末添加一个换行符。

实例:一个标准的输入、输出应用

要求:定义一个变量name,并提示请输入名字并换行,然后手动输入一个值,然后输出你的名字是{name}

源码:

#include <iostream>

using namespace std;

int main(){

    char name[50];
    cout << "请输入名字" << endl;
    cin >> name;
    cout << "你的名字是" << name;
}

C语言提供的输入/输出(scanfprintf)

C语言头文件<cstdio>

<cstdio> 是 C++ 标准库中的一个头文件,它包含了 C 语言标准 I/O 库的 C++ 封装,主要用于文件的输入和输出操作。

在使用 <cstdio> 库中的函数之前,需要在 C++ 程序的顶部包含这个头文件:

#include <cstdio>

scanfprintf

使用例:

#include <cstdio>

int main() {
  int x, y;
  scanf("%d%d", &x, &y);   // 读入 x 和 y
  printf("%d\n%d", y, x);  // 输出 y,换行,再输出 x
  return 0;
}

%的应用

其中,%d代表读入/输出的变量是一个有符号整型(int 型)的变量。

类似地:

  1. %s 表示字符串。

  2. %c 表示字符。

  3. %lf 表示双精度浮点数 (double)。

  4. %lld 表示长整型 (long long)。根据系统不同,也可能是 %I64d

  5. %u 表示无符号整型 (unsigned int)。

  6. %llu 表示无符号长整型 (unsigned long long),也可能是 %I64u

除了类型标识符以外,还有一些控制格式的方式。许多都不常用,选取两个常用的列举如下:

  1. %1d 表示长度为 1 的整型。在读入时,即使没有空格也可以逐位读入数字。在输出时,若指定的长度大于数字的位数,就会在数字前用空格填充。若指定的长度小于数字的位数,就没有效果。

  2. %.6lf,用于输出,保留六位小数。

这两种运算符的相应地方都可以填入其他数字,例如 %.3lf 表示保留三位小数。

特殊地,%% 表示 %,只能用在 printfscanf 中,在其他字符串字面量中只需要简单使用 % 就好了。

取址运算符&

在3.1中,这个运算符被简要提到过,返回的是变量在内存中的地址。而 scanf 接收的参数就是变量的地址。

换行符

这是转义序列。在2.3中有提到。

  • \\:\ 字符

  • \':' 字符

  • \":"字符

  • \?:?字符

  • \b:退格

  • \f:换页

  • :换行

  • :回车

  • :水平制表符

  • \v:竖直制表符

此外,\0 表示空字符

处理整行输入(getline)

使用std::getline函数可以读取包含空格的整行输入。

#include <iostream>
#include <string>

int main() {
    std::string fullName;
    std::cout << "Enter your full name: ";
    std::getline(std::cin, fullName);
    std::cout << "Hello, " << fullName << "!" << std::endl;

    return 0;
}

Last updated