cin 和 cout所包含的部分接口的用法
一. 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()的用法
参考此链接
添加链接描述