如果是问scanf实现原理的话,可以参考scanf的源码
#include <stdarg.h>
int scanf(const char *format, ...)
{
va_list ap;
int retval;
va_start(ap, format);
retval = _doscan(stdin, format, ap);
va_end(ap);
return retval;
}
不难看出scanf用的是变长参,va_start和va_list、va_end是stdarg.h中的一组宏,ap获取参数个数,而_doscan很长300行就不列出来了QAQ。如果是C++11可以用变长模板来解决这个问题:
using namespace std;
template <class T>
void Get(T& t){
cin >> t ;
}
template <class T, class ... Args>
void Get( T& t, Args& ... args){
cin >> t;
Get(args...);
}
调用:
int a,b;
Get(a,b);
宽字符版本可以将cin改成wcin。
QAQ