c++输入流
getline()与cin.getline()区别
getline()可以理解为C语言编程,cin.getline()可以理解为c++编程。 **getline(cin,line,’?’)**有三个参数(也可以有两个),它的输出结果为将缓冲区bufffer区中的内容存放到line中,直到碰见
字符’?’。’?'以后的字符不会保存到缓冲区,也不需要进行相应处理。
**cin.getline(line,num,’?’)**也有三个参数,在输入过程中,当输入字符达到n-1个或者提前遇到‘?’字符时
,输出结束。
注意
1、**cin.getline()**属于istream流,而getline()属于string流,是不一样的两个函数
2、当同时使用 cin>> , getline() 时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
str="\n";
getline(cin,str);
的方式将****回车符****作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。
cin.ignore(int a,char h)详解
**cin.ignore(int a,char h)**函数中有两个参数,分别为数值型的 a 和 字符型的 ch,如果计数值达到 a 或者被抛弃的字符是 ch ,则函数执行终止,它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。例如可以这么用,cin.ignore(1024, ‘\n’),通常把第一个参数设置得足够大,这样实际上是为了只有第二个参数 ‘\n’ 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲流中清除出去。
cin.get()、cin.get(ch)、cin.get(字符数组, 字符个数 n, 终止字符)
**cin.get()**用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符。
**cin.get(ch)**从缓冲区要数据,阻塞,取走,跟 cin.peek()不同,其作用是从输入流中读取一个字符,赋给字符变量 ch。如果读取成功则函数返回 true(真),如失败(遇文件结束符) 则函数返回 false(假)。cin.peek()则是从缓冲区取走字符,返回值是一个 char 型的字符,其返回值是指针指向的当前字符,但它只是观测,只是看一看,指针停留在当前位置并不后移;如果要访问的字符是文件结束符,则函数值是EOF(-1)
**cin.get(字符数组, 字符个数 n, 终止字符)**其作用是从输入流中读取 n-1 个字符,赋给指定的字符数组(或字符指针指向的数组),如果在读取 n-1 个字符之前遇到指定的终止字符,则提前结束读取,如果读取成功则函数返回 true(真),如失败(遇文件结束符) 则函数返回 false(假)。
其他输入流
**cin.gcount() **返回最后一个非格式化的抽取方法读取的字符数
**cin.read(c, n)**从字符串流中读取n个字符到c数组中。
C++输出流
**cout.width(); ** //输出格式控制
**cout.flush(); ** //刷新缓冲区
cout//全局流对象,输出数据到显示器
cerr //标准错误,输出数据到显示器,没有缓冲区
**clog **//标准日志 输出数据到显示器,有缓冲区