cin 和 cout所包含的部分接口的用法

  • Post author:
  • Post category:其他




一. cin类



1.cin的用法:

C++中,当用户键入输入之后按下Enter键或空格或tab,便会将所有刚刚用户输入的一次性全送到缓冲区,而cin便会从输入缓冲区中读取数据。回车标志一次输入的完成,如果数据不够,则会等待用户继续输入;如果数据有多余,则将多余的数据存储在输入流缓冲区中,供下次使用。

#include<iostream>
using namespace std;
int main(void)
{
	int a,b;
	cout << "Please input a and b:" << endl;
	cin >> a >> b;
	cout << "a = " << a << " ,b = " << b << endl;
	return 0;
}

输入:5 6

输出:a = 5 ,b = 6



2.cin.get()的用法

  • cin.get():类似C语言中的getchar(),用于获取单个字符(包括空格,tab建和换行符)
#include<iostream>
using namespace std;
int main(void)
{
	char ch;
	ch = cin.get();//这句话也等价于cin.get(ch)
	cout << "ch =  " << ch << endl;
	return 0;
}

输入:b

输出:ch = b

注意:这里获取到的字符是以ASCII码表示的,也就是说,如果读取的是整数,cin.get()只会保存第一个字符

(例如输入整数65,它只会获取’6’这个字符,并打印出’6’的ascii码54)

#include<iostream>
using namespace std;
int main(void)
{
	int ch;
	ch = cin.get();
	cout << "ch =  " << ch << endl;
	return 0;
}

输入:65

输出:ch = 54

还有一点值得我们注意,当我们使用cin.get()输入任意字符+[Enter]的时候,cin.get()只会把第一个字符输出,所以此时缓冲区还保存着一个[Enter]的字符,此时如果不进行任何操作再次使用cin.get(),它会直接读取到缓冲区遗留的[Enter],用户此时便不能再从键盘输入字符。

#include<iostream>
using namespace std;
int main(void)
{
	char ch;
	cin.get(ch);
	int i = ch;
	cout << "ch 的ASCILL值 =  " << i << endl;
	cin.get(ch);
	i = ch;
	cout << "ch 的ASCILL值 =  " << i << endl;
	return 0;
}

按道理讲我们应该进行两次输入,其实不然,[Enter]的ASCII值为10。

输入:a[Enetr]

输出:ch 的ASCII值为 65

ch 的ASCII值为10

那么我们该如何处理这种情况呢?我们直接使用无参数的cin.get()就可以了。

#include<iostream>
using namespace std;
int main(void)
{
	char ch;
	cin.get(ch);
	int i = ch;
	cout << "ch 的ASCILL值 =  " << i << endl;
	cin.get();

	cin.get(ch);
	i = ch;
	cout << "ch 的ASCILL值 =  " << i << endl;
	return 0;
}

输入:a[Enetr]b[Enter]

输出:a = 97

b = 98



3.cin.getline()以及getline()的用法:

getline()根据函数参数的不同可以分为两种

getline(char*buffer,streamsize num,char delim)

getline(char*buffer,streamsize num)


其中,第一个参数表示进行读入操作的输入流,第二个参数表示存储读入的内容,第三参数表示终止符

函数的作用就是讲输入流中读取到的字符存储在第二个参数中(一般为string类),如果读入的时候遇到了终止符或者文件结束符(EOF),读入结束,将终止符丢弃,并将终止符后的字符(不包括终止符)存入缓冲区。

#include<iostream>
#include<string>
using namespace std;
int main(void)
{
	string line;
	getline(cin,line,'?');
	cout << line << endl;
	return 0;
}

输入:get?line

输出:get

cin.getline(char *cha,int num,char f);

cin.getline(char *cha,int num)

cin.getline()在语法上略有不同,第二个参数是整数,它的使用方法是将输入流(cin)的前(num-1)个数字存储在数组中(第一个参数)中,如果遇到终止符(第三个参数)

#include<iostream>
using namespace std;
int main(void)
{
	char line[100];
	cin.getline(line,10,'?');
	cout << line << endl;
	return 0;
}

输入:get?line

输出:get

输入:hello world!

输出:hello wor



4.cin.peek()的用法

其调用形式为cin.peek(),返回值是一个char类型的字符,其返回值是指向的当前字符,如果要访问的字符是文件结束符,则函数值是EOF(-1)。但只是做观测使用,即指针仍停留在当前位置,并不后移。其功能是从输入流(cin)中读取一个字符,但该字符并未从输入流中删除。若把输入流比作一个队列,那么peek()函数相当于队列的成员函数front(),而cin.get()则相当于队列的成员函数pop()。

————————————————

版权声明:这里引用了CSDN博主「薛定谔的猫ovo」的描述

原文链接:https://blog.csdn.net/weixin_44162361/article/details/118971453

#include<iostream>
using namespace std;
int main() 
{
	int sum = 0;
	int c;
	while (cin >> c) 
	{
		sum += c;
		while (cin.peek() == ' ')  //遇到换行符终止输入
		{    
			cin.get();
		}
		if (cin.peek() == '\n') //遇到换行符终止输入
		{
			break;
		}
	}
	cout << sum << endl;
	return 0;
}

注:该例是对输入一行带任意空格的整数进行求和



5.cin.ignore()的用法

ignore翻译过来就是忽略的意思,顾名思义,cin.ignore(int size,char ch)的用法是从输入流中提取字符并忽略,如果被忽略的字符数达到了size(第一个参数)或者被忽略的字符是ch(第二个参数),则函数执行停止。在使用的时候,我们一般把第一个参数设置的很大,使得函数通过第二个参数才结束,例如cin.ignore(1024,’\n’)可以将缓冲区中’\n’以前(包括’\n’)的字符全部丢弃,常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。

#include<iostream>
using namespace std;
int main(void)
{
	char ch1;
	cin >> ch1;
	cin.ignore(1024,'\n');
	char ch2;
	cin >> ch2;
	cout << "ch1 = " << ch1 << ",ch2 = " << ch2 << endl;
	cin.ignore(1024,'\n');
	return 0;
}

输入:a[Enter]b

输出:ch1 = a,ch2 = b



二.cout类



1.cout的用法

cout << a 将a的值输出到终端上显示出来,同时我们可以直接输出字符串,如cout << “a = ” << a << endl,endl表示输出结束并自带一个换行符。

#include<iostream>
using namespace std;
int main(void)
{
	a = 66;
	cout << "a = " << a << endl;
}

输出:a = 66



2.cout.precision的用法

调用格式为cout.precision(n) ,意为对接下来的输出结果保留n位有效数字,注意!!是有效数字而不是小数点后的位数!!值得注意的是,保留有效位数时会进行四舍五入,并且当n的值大于要输出的数的有效位数时,只会输出原来的数的全部有效位,而不会在后面补0

#include<iostream>
using namespace std;
int main(void)
{
	double pi = 3.1415926;
	cout.precision(1);
	cout << pi << endl;
	cout.precision(2);
	cout << pi << endl;
	cout.precision(3);
	cout << pi << endl;
	cout.precision(7);
	cout << pi << endl;
	cout.precision(12);
	cout << pi << endl;
	return 0;
}

输出:3

3.1

3.14

3.141593

3.1415926

setprecision(n)函数与cin.precision(n)类似,它的调用格式是cout<< setprecision(n) << f。即输出f并保留n位有效数字。注意setprecision()函数的使用需要头文件< iomanip >。和cout.precision()一样的是,当n大于f的小数位时,仍不会自动补0。

#include<iostream>
#include <iomanip>
using namespace std;
int main(void)
{
	double pi = 3.1415926;
	cout << setprecision(5) << pi << endl;
	cout << setprecision(10) << pi <<endl;
	return 0;
}

输出结果:3.1416

3.1415926

那么有没有办法只控制小数点的位数并使其可以自动补0呢?这时候我们需要使用到fixed,setprecision()是控制输出流显示浮点数的有效数字个数 ,如果和fixed合用的话,可以控制小数点右面的位数。例如控制n位小数我们可以使用cout << fixed << setprecision(n) << f,此时n位小数位!!而不是有效数位!!

#include<iostream>
#include <iomanip>
using namespace std;
int main(void)
{
	double pi = 3.1415926;
	cout << fixed << setprecision(5) << pi << endl;
	cout << fixed << setprecision(10) << pi <<endl;
	return 0;
}

输出结果:

3.14159

3.1415926000



3.cout.width()的用法

参考此链接

添加链接描述



版权声明:本文为m0_55098711原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。