我理解的输入输出流:
输入过程:
A.键盘->输入缓冲区
B.输入缓冲区->cin时赋值给变量
输出过程:
C.变量->cout时存入输出缓冲区
D.输出缓冲区->显示器
为什么下面代码中前4段的输出一样呢?我感觉涉及到以下问题点,求大神解惑,感谢!
1.用cin赋值给字符串,与用istringstream赋值给字符串,有什么区别?
2.跳过空格,指的是键入的空格不存储到输入缓冲区里;还是,先存入到输入缓冲区里,但给字符串赋值的时候跳过?即在A阶段还是B阶段跳过空格?
3.遇到空格,输入停止:指的是,往输入缓冲区里存的时候,遇到空格停止;还是,从输入缓冲区赋值给字符串的时候,遇到空格停止?即A阶段遇到空格停止,还是B阶段遇到空格停止?
#include <iostream>
#include <sstream>
using namespace std;
int main(int argc, char const* argv[])
{
istringstream istr(" 78456 9 123"); // 数字前面都是两个空格
string a,b,c;
/*-----------------------------------------------*/
cout << "第1段:" << endl;
cin >> a >> b >> c; //键盘输入与istr相同的字符串
cout << a << endl;
cout << b << endl;
cout << c << endl;
/*-----------------------------------------------*/
cout << "第2段:" << endl;
cin >> skipws >> a >> skipws >> b >> skipws >> c; //键盘输入与istr相同的字符串
cout << a << endl;
cout << b << endl;
cout << c << endl;
/*-----------------------------------------------*/
cout << "第3段:" << endl;
istr >> skipws >> a;
istr >> skipws >> b;
istr >> skipws >> c;
cout << a << endl;
cout << b << endl;
cout << c << endl;
/*-----------------------------------------------*/
cout << "第4段:" << endl;
istr >> noskipws >> a;
istr >> noskipws >> b;
istr >> noskipws >> c;
cout << a << endl;
cout << b << endl;
cout << c << endl;
/*-----------------------------------------------*/
cout << "第5段:" << endl;
a = " 78456";
b = " 9";
c = " 123";
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
输出结果:
第1~4段相同,无空格