cin,cin.getline解决方案

cin,cin.getline#include iostreamusing namespace stdint main(){char ch[20]int icoutenter a s

cin,cin.getline
#include <iostream>
using namespace std;
int main()
{char ch[20];
int i;
 cout<<"enter a sentence:"<<endl;
 cin>>ch;  
 cout<<"The string read with cin is:"<<ch<<endl;

 cin.getline(ch,20,'/');
 cout<<"The second part is:"<<ch<<endl;
  
 cin.getline(ch,20);
 cout<<"The third part is:"<<ch<<endl;
 return 0;
}

输入:I like C++./I study C++./I am happy.回车。
输出为:
The string read with cin is:I
The second part is:like C++.
The third part is:I study C++./I am h

请问:
1.究竟是怎么存入“I like C++./I study C++./I am happy.”  
2.cin与getline又是怎么取数据的
3.ch[]在程序中的各个状态是怎样的

这是谭浩强书上的一个例题,我就是没看明白这个程序中流究竟是怎以运行的

[解决办法]
1.cin>>ch是肯定不行的,他遇到空格、tab键、回车就会结束读入,所以第一个打印才是"I"
2.cin.getline(ch,20,'/');//读入到'/'为止,不过最多只能读20个字符
3.cin.getline(ch,20);//这个就是纯粹的从输入流中读入20个字符为止了,不管是空格还是回车之类的所以,你想读入“I like C++./I study C++./I am happy.”,ch要够大,参数也要足够大

之前有人回复你的,我再补充下,cin.getline(ch,20,'/');读取后将丢弃‘/'字符
ch遇到空格,空格不被丢弃,还在输入流中
cin.getline(ch,20);//默认都回车或者读满,回车被丢弃
[解决办法]
The second part is:like C++.
这句的输出为 The second part is: like C++.,少了个空格
[解决办法]
1、用字符串流中的函数可以读取整行:
string str;
getline(cin,str);//读取整行对象

2 cin读到空格就会停止,getline会忽略空格等符号,读取指定长度的字符

3、
输入:I like C++./I study C++./I am happy.回车。
输出为:
The string read with cin is:I //在第一个空格处被截断

The second part is:like C++. //此时输入流中为:like C++./I study C++./I am happy.回车。
//cin.getline(ch,20,'/');读取终止符为/,最多读取19个字符,额外一个用来存储结尾的空字符

The third part is:I study C++./I am h //此时输入流中为:I study C++./I am happy.
 cin.getline(ch,20);//此函数读取19个字符或者遇到换行符后将终止,这里是读到19个字符终止