I/O缓冲区问题(郁闷了我很久,求高人指点。)
#include <iostream.h>
int main(int argc, char* argv[])
{
char s[10];
cin.get(s,10);//第1次输入
cout<<s<<endl;
cin.get(s,10);//第2次输入
cout<<s<<endl;
return 0;
}
当用户在第1次输入时,输入字符数大于9,例如输入"1234567890123","0123"自动被第2次个cin.get()接受。这样用户就无法进行第2次输入了。
怎么样能解决这个问题啊?
问题点数:20、回复次数:5Top
1 楼du51(郁郁思扬)回复于 2005-05-08 00:21:25 得分 7
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
char s[10],str[80];
cin.get(s,10);//第1次输入
cout<<s<<endl;
cin.get();cin.getline(str,80);
cin.get(s,10);//第2次输入
cout<<s<<endl;
system("PAUSE");
return 0;
}Top
2 楼du51(郁郁思扬)回复于 2005-05-08 00:21:52 得分 0
取出回车,再取空留下的.就可以了.Top
3 楼w_zforever(舞动的枫叶)回复于 2005-05-08 00:35:11 得分 0
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
char s[10],str[80];
cin.get(s,10);//第1次输入
cout<<s<<endl;
cin.get();cin.getline(str,80); //多出了一次输入
cin.get(s,10);//第2次输入
cout<<s<<endl;
system("PAUSE");
return 0;
}
--------------------------------------------------------------
这样是处理了第1次输入超过边界的问题,
但是用户第1输入是在有效范围之内,原来的1、2次输入中间就多出了一次输入。
头疼啊.......这问题让我从C郁闷到C++Top
4 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2005-05-08 01:03:55 得分 7
cin.get();cin.getline(str,80); //多出了一次输入
=====
你这里多一个cin.get()啦。去掉这个Top
5 楼xjtubox(我爱交大)回复于 2005-05-08 01:29:24 得分 6
#include <istream>
#include <limits>
template <class charT, class traits>
inline
std::basic_istream<charT,traits>&
ignoreLine (std::basic_istream<charT,traits>& strm)
{
// skip until end-of-line
strm.ignore(std::numeric_limits<int>::max(),strm.widen('\n'));
// return stream for concatenation
return strm;
}
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
char s[10];
cin.get(s,10);//第1次输入
cout<<s<<endl;
cin>>ignoreLine;//ignore the rest of the line
cin.get(s,10);//第2次输入
cout<<s<<endl;
return 0;
}
Top




