C++输入输出

  1. 输入,输出
    1. 1. 缓冲区概述
    2. cin 的工作原理
    3. getline 的工作原理
    4. getchar 的工作原理
    5. cin.ignore() 介绍
    6. 其他c++输入函数
    7. 精度输出
  2. Debug

输入,输出

1. 缓冲区概述

在C++中,标准输入缓冲区是一个存储输入字符的区域。当你在控制台中输入数据并按下回车键后,所有的输入字符(包括空格、制表符和换行符)都会被存储到缓冲区中。程序可以通过输入流对象 cin 从缓冲区读取数据。

cin 的工作原理

cin 是标准输入流,用于从缓冲区读取数据。cin 使用操作符 >> 读取数据时,会自动跳过前导空白字符(包括空格、制表符和换行符)。

  1. 忽略前导空白字符:在读取数据时,cin 会跳过所有前导的空格、制表符和换行符。
  2. 读取数据直到下一个空白字符cin 从第一个非空白字符开始读取,直到遇到下一个空白字符为止。读取的数据会被保存到指定的变量中。
  3. 更新指针位置cin 指针会移动到读取的最后一个字符之后,准备进行下一次读取。

getline 的工作原理

getline 用于从缓冲区读取一整行数据,直到遇到换行符 \n 为止。getline 读取后会丢弃换行符,但不会跳过前导空白字符。

getline(cin,s);

  1. 从当前指针位置开始读取getline 从缓冲区当前指针位置开始读取字符。
  2. 读取直到遇到换行符getline 读取字符直到遇到换行符 \n,并将读取的内容保存到字符串变量中。
  3. 丢弃换行符getline 会丢弃遇到的换行符 \n,指针移动到换行符之后的位置。

std::getline(std::istream& is, std::string& str, char delim)
读取到指定字符为止,不会存入该字符。

getchar 的工作原理

getchar 是一个标准输入函数,用于从标准输入缓冲区读取一个字符,返回其 ASCII 码值,并将输入指针后移一位。

  1. 读取当前位置的字符:从标准输入缓冲区中读取当前指针位置的字符。
  2. 返回 ASCII 码:返回读取字符的 ASCII 码值。
  3. 指针后移:将输入指针移动到下一个字符的位置。

cin.ignore() 介绍

cin.ignore() 是 C++ 标准库中的一个函数,用于忽略输入流中的字符。它有两个重载形式:

  1. 无参数形式:忽略一个字符(指针移动一位)。
  2. 带参数形式:忽略指定数量的字符,或者直到遇到指定的终止字符。
std::istream& ignore(std::streamsize n = 1, int delim = EOF);

其他c++输入函数

cin.getline(s,100);//读取一定数量的字符,功能和getline()相近
读取到指定字符数或/n
cin.getline(s,100,c);
读取到指定字符数或字符c
cin.get(c)
单个字符c,不能重载为字符串
cin.get(s,100);
读取字符串,长度为100或\n停止
cin.get(s,100,c);
cin.read()
读取字符放到缓冲区

cin.get() 和 getline的区别在是否保留\n

精度输出

setpricision(n)前加fixed保留小数位数
不加fixed有效位数

cout<<fixed<<setprecision(4)<<3.1415926;
const double eps = 1 - 1e5;

对齐

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int a = 123;
    double b = 45.678;
    string c = "example";

    // 输出左对齐,右对齐
    cout << setw(10) << left << "Number" << setw(10) << right << a << endl;
    cout << setw(10) << left << "Value" << setw(10) << right << b << endl;
    cout << setw(10) << left << "Text" << setw(10) << right << c << endl;

    return 0;
}

Debug

assert(表达式);
表达式不满足时终止程序

github