前言:第一篇博客,就让它见证我的成长过程吧。
近日写一个串口通信的实例,中间有一个环节是关于参数的配置,为了避免过多输入的冗余,于是想通过回车默认的方式来确认。
cin << a ; //该方式直接回车无效,以Carl+Z 或者 非法字符结束
cin.get(); && cin.getline(); //接收回车,get接收单个字符,getline接收一行字符串
cin.peek(); //返回指针指向的当前字符,但是只是观测,指针并不后移
cin.putback(c); //将c字符归还缓冲区
所以,想到的办法是,取一个字符,判断是否为回车,倘若不是,归还该字符,并且以正确的格式输入。对于多种格式的参数输入,为了提高函数的重用性,使用模板函数。部分代码如下:
template <typename T>
void input(T &t)
{
char c;
cin.get(c);
if (c != '\n')
{
cin.putback(c);
cin >> t;
cin.get(); //清楚输入后留下的回车,或者直接清空缓存区也可
}
}
int main()
{
/* INIT 串口相关默认参数*/
UINT initport = 3;
UINT baud = CBR_9600;
char parity = 'N';
UINT databits = 8;
UINT stopsbits = 1;
char ret = 'N';
cout << "输入端口号(Default:3):";
input<UINT>(initport);
cout << "输入波特率(Default:9600):";
input<UINT>(baud);
cout << "输入是否奇偶校验(Default:'N'):";
input<char>(parity);
cout << "输入数据位(Default:8):";
input<UINT>(databits);
cout << "输入停止位(Default:1):";
input<UINT>(stopsbits);