cin:从缓存流中读取到变量;
经过试验发现,cin输入变量在前遇到’空格‘和‘回车’时,会自动忽略,
输入后面元素到变量;而在输入变量后遇到回车或者空格停止输入;
在输入时,前遇空格或者回车会在输入缓存流中丢弃;
而在输入完成的后遇到回车或者空格时,停止输入,并未丢弃,
而是将之保留在输入缓存流中,等待下一步输入指令。
如下图:
#include <iostream>
#include<string>
using namespace std;
int main()
{
string str,str1;
int a = 0,b=0;
cin >> a;
cin >> str;
cin >> b;
cin >>str1;
cout << a << endl << str << endl << b << endl << str1 << endl;
getchar();
getchar();
}
cin直接忽略了输入缓存流中的空格和回车,直接输入数据;
getline;从缓冲流输入字符串,可以输入空格,遇到回车停止,并且将回车从缓冲流删除;
#include <iostream>
#include<string>
using namespace std;
int main()
{
string str,str1;
int a = 0,b=0;
cin >> a;
getline(cin,str);
cout << a << endl << str << endl;
}
如果直接输入5回车,str中将会是空;
因为,cin输入5到a中,遇到回车,停止输入,
cin不会从输入流中删除回车,此时getline遇到第一个字符就是回车,
而getline遇到回车即停止输入,且将回车从输入流删除,
于是,通过设置中断可以查看str为空;
为解决上述问题,可以再cin输入a后加上一个getchar();
吸收回车符号,这样就可以正常输入到str了
#include <iostream>
#include<string>
using namespace std;
int main()
{
string str,str1;
int a = 0,b=0;
cin >> a;
getchar();
getline(cin,str);
cout << a << endl << str << endl;
}