带两个参数的get()函数
#include <iostream>
using namespace std;
int main()
{
char ch1[20];
char ch2[20];
cin.get(ch1,20);
cout<<ch1<<endl;
cout<<"请输入ch2"<<endl;
cin.get(ch2,20);
cout<<ch2;
system("pause");
return 0;
}
结果:
输入hello world
hello world
请输入ch2
请按任意键结束.......
不懂为什么,在cin.get(ch1,20)中键入的字符然后enter放在刷新后的缓冲区,1[b][/b][color=#FF0000][/color]:这个缓冲区是输入缓冲区还是输出缓冲区呢?
然后应该缓冲区遇到endl/flush时会输出并且刷新的吧?2[b][/b][color=#FF0000][/color]在cout<<ch1<<endl;时就应该已经输出了enter了吧?怎么到cin.get时才输出呢?????
[解决办法]
cin.get(ch1 ,20)这个函数以字符串的首地址和一整数为参数。当你输入字符串hello world后以enter键结束输入
而enter这个字符保留在输入队列中!当你再次输入时,cin遇到的是enter!因此cin认为已经到了行尾,而没有
发现可读取的内容。如不借用其他方式,get()将不能跨过enter字符!所以当你完成第一个字符串后应把enter
接收在输入第二个字符串!
试试这样!
#include <iostream>
using namespace std;
int main()
{
char ch1[20];
char ch2[20];
cin.get(ch1,20);//也可这样cin.get(ch1,20).get()去掉cin.get()语句;或者用cin.getline(ch1,20);
cin.get();
cout<<ch1<<endl;
cout<<"请输入ch2"<<endl;
cin.get(ch2,20);
cout<<ch2<<endl;
system("pause");
return 0;
}
cin.getline(ch1,20);可以解决问题的原因是:cin.getline(ch1,20)这个函数当你输入一段字符串后enter结束后,cin.getline()会丢掉enter字符。