(1)
include<iostream.h>
#include<stdlib.h>
void main()
{
int choice;
cout<<"choice:";
cin>>choice;
while(!cin)
{
cerr<<"Invalid character"<<endl<<"Enter again-choice:";
cin.clear();
int chars_to_skip=cin.rdbuf()->in_avail();
cin.ignore(chars_to_skip);
cin>>choice;
}
system("cls");
}
(2)写成函数,进行调用
#include<iostream.h>
#include<stdlib.h>
istream& Flush(istream& stream)
{
stream.clear();
int chars_to_skip=stream.rdbuf()->in_avail();
return stream.ignore(chars_to_skip);
}
void main()
{
int choice;
cout<<"choice:";
cin>>choice;
while(!cin)
{
cerr<<"Invalid character"<<endl<<"Enter again-choice:";
Flush(cin);
cin>>choice;
}
system("cls");
}
cin.rdbuf()->in_avail()函数
rdbuff() is a method
If cin's streambuf
If cin's streambuf
#include<iostream.h>
#include<stdlib.h>
void main()
{
int a;
streambuf* sb;
sb = cin.rdbuf();
cout<<sb->in_avail()<<endl; // will print zero
cin>>a;
sb = cin.rdbuf();
cout<<sb->in_avail()<<endl; // will print 输入的个数
}
C++中rdbuf重定向流的使用
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{std::ifstream log("out.log");
std::streambuf * x=cout.rdbuf(log.rdbuf());// 返回cout的流对象指针,使cout重定向到log文件中
std::cout << "Testn";// 写入到文件中
std::cout.rdbuf(x);// 恢复cout的流对象指针
std::cout << "Test2n";// 写入cout
return 0;
}