C++基本输入输出及常用函数

前言

一直以来都没怎么关注算法(好麻烦的样子),但最近必须要准备研究生复试(机试)和找工作,所以不得不硬着头皮开始怼,奈何相关基础薄弱,leetcode刷一题得找好多相关资料,权衡再三,便决定从基础学起(不知道晚不晚),考虑到近期的任务需要,最终选择C++作为算法编程语言。本文主要总结了C++的常用输入输出以及其他常用函数的用法。

缓冲区

C++的缓冲区与《操作系统》的相关概念一致,本质上是一块内存区域,它用在IO设备和CPU之间,用来缓存数据。缓冲区的存取速度一般比CPU慢但又比IO设备快,因此用于低速的IO设备和高速的CPU之间协调它们的速度差异,避免低速的IO设备大量占用CPU资源,使其能够高效率工作(归根结底只为压榨CPU性能,很多计算机技术都是如此)。

iostream

cin

  1. cin»
    等价于cin.operator>>(),以空格、制表符、换行符(以下简称分隔符)作为分隔符从缓冲区读取对应类型的数据。如果缓冲区中第一个字符是分隔符时,cin>>会将其忽略并清除,继续读取下一个字符;如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理;如果缓冲区为空,则继续等待;
  2. cin.get()
    cin>>无法满足所有场景下的输入需求,比如不能使用 >> 运算符读取/判定分隔符,cin.get()便能很好的解决此类问题,其主要方法如下:
方法 解释 返回值
int cin.get() 读取一个字符并返回 成功:返回读取字符的ASCII码值;遇到文件结束符时,返回EOF,即-1,Windows下标准输入输入文件结束符为Ctrl+z,Linux为Ctrl+d
istream& cin.get(char& var) 读取一个字符var 返回的是istream对象,因此可以支持链式操作(cin.get(b).get(c))
istream& cin.get(char* buf, int n ) 读入字符到buf数组中,直至读取n个字符或换行符停止 同上
istream& cin.get(char* buf, int n, char delim = '\n') 读入字符到buf数组中,直至读取n个字符或delim指定的字符停止 同上

示例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
int main(){
    int n,sum = 0;
    char ch[10];
    cin>>ch;		// fantasy
    cout<<ch;		// fantasy

    cin.get(ch[0]);	// fantasy
    cout<<ch;			// f
    
    cin.get(ch,5);	// fantasy
    cout<<ch;			// fant
    
    cin.get(ch,10,'s');		// fantasy
    cout<<ch;				// fanta
    
    return 0;
}
  1. cin.getline()
方法 解释 返回值
cin.getline(char* buf, int n) 读入字符到buf数组中,直至读取n个字符或换行符停止 istream对象
cin.getline(char* buf, int n, char delim) 读入字符到buf数组中,直至读取n个字符或delim指定的字符停止 同上

注意:cin.getline()当输入超过buf长度时,多余的字符将被丢弃;cin.getlinecin.get的区别是:cin.getline不会将分隔符残留在输入缓冲区中

  1. 其他相关函数
方法 解释 备注
cin.ignore(int n=1, char delim = EOF) 抛弃输入流中的数据,直至抛弃n个或遇到delim指定的字符(delim本身也被抛弃) 用于清除缓冲区内容
istream& getline(istream input, char *buf, char delim = '\n') 从输入流input读入字符到buf数组中,直至读取到delim指定的字符停止
istream& gets(char *buf) 将所有输入流的数据读入buf数组中 可能发生溢出

cout

方法 解释
cout<<endl 完成换行并刷新缓冲区
cout<<flush 直接刷新缓冲区
cout<<unitbuf 设置这个cout输出流在接下来的每次操作之后都自动刷新缓冲区
cout<<nounitbuf 让cout回到默认的缓冲设置

常用场景

  1. 输入多组(未知数量)数据并处理
1
2
3
4
int a,b;
while(cin>>a&&cin>>b){
    cout<<a+b<<endl;
}
  1. 读取并计算一组以换行符结束的数据(位置数量)的和
1
2
3
4
5
while(true){
    sum += n;
    if(cin.get() == '\n') break;
    cin>>n;
}

其他函数

  1. system("pause") 发起系统命令行调用,暂停屏幕,一般用于查看执行结果

总结

之前学过C++,但平常一直在用JavaPython,以至于连最基本的C++函数都忘了,以后要常用,并会将遇到的相关I/O问题及时更新至本文。