关于C++中getline引发的问题

      今天在编程的时候遇到了一个小问题,着实困惑了我很久。就是当我前边输入一个数并以回车结束时,这个回车符自动地被getline捕捉,当然,我想输入的根本不是这个回车符。

请看图:

                   关于C++中getline引发的问题

       当我输入n的值为2 并以回车为结束的时候,下边的循环直接进行了两次。原因可以分为两方面,第一是默认情况下,getline以‘\n’为结束标志,如果你把getline的第三个参数设置为‘#’,则不会出现上述情况。第二,从输入的六状态找原因,网上的答案有的说用cin.clear(),有的说要cin.clear()和cin.ignore()一起用才有效。在这里我参考了网上的各种版本以及自己的实践经历总结如下:

cin.clear():重置流的状态,使之有效。也就是说如果想要消除错误输入的影响,需要添加此函数。

cin.ignore(): 忽略当前缓冲区的第一个字符(即回车)。

所以要结合自己的情况使用这两个函数,事实是在我的函数中值需要使用cin.ignore()就可以了。