输入,输出
1. 缓冲区概述
在C++中,标准输入缓冲区是一个存储输入字符的区域。当你在控制台中输入数据并按下回车键后,所有的输入字符(包括空格、制表符和换行符)都会被存储到缓冲区中。程序可以通过输入流对象 cin 从缓冲区读取数据。
cin 的工作原理
cin 是标准输入流,用于从缓冲区读取数据。cin 使用操作符 >> 读取数据时,会自动跳过前导空白字符(包括空格、制表符和换行符)。
- 忽略前导空白字符:在读取数据时,
cin会跳过所有前导的空格、制表符和换行符。 - 读取数据直到下一个空白字符:
cin从第一个非空白字符开始读取,直到遇到下一个空白字符为止。读取的数据会被保存到指定的变量中。 - 更新指针位置:
cin指针会移动到读取的最后一个字符之后,准备进行下一次读取。
getline 的工作原理
getline 用于从缓冲区读取一整行数据,直到遇到换行符 \n 为止。getline 读取后会丢弃换行符,但不会跳过前导空白字符。
getline(cin,s);
- 从当前指针位置开始读取:
getline从缓冲区当前指针位置开始读取字符。 - 读取直到遇到换行符:
getline读取字符直到遇到换行符\n,并将读取的内容保存到字符串变量中。 - 丢弃换行符:
getline会丢弃遇到的换行符\n,指针移动到换行符之后的位置。
std::getline(std::istream& is, std::string& str, char delim)
读取到指定字符为止,不会存入该字符。
getchar 的工作原理
getchar 是一个标准输入函数,用于从标准输入缓冲区读取一个字符,返回其 ASCII 码值,并将输入指针后移一位。
- 读取当前位置的字符:从标准输入缓冲区中读取当前指针位置的字符。
- 返回 ASCII 码:返回读取字符的 ASCII 码值。
- 指针后移:将输入指针移动到下一个字符的位置。
cin.ignore() 介绍
cin.ignore() 是 C++ 标准库中的一个函数,用于忽略输入流中的字符。它有两个重载形式:
- 无参数形式:忽略一个字符(指针移动一位)。
- 带参数形式:忽略指定数量的字符,或者直到遇到指定的终止字符。
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(表达式);
表达式不满足时终止程序