c++输入缓存区彻底清空

一开始遇到的问题大概是

while循环中判断的变量如果输入非数字时会导致死循环

在其他文章中看到其他清空输入缓存区的方法,但是使用后仍有一些问题,比如

cin.clear();与cin.ignore();一起使用时

即为在while循环中的末尾添加两行语句
比如

while(x)
{
...
...
...
	cin.clear();
	cin.ignore();
}

虽然确实解决了死循环的问题,但是里面如果有if语句的话,本次所有的if语句都会真,继续执行

while ((a = getchar()) != ‘\n’);使用时

即在输入数据后使用gatchar把被读取的数据,后面剩下的数据依次读取出来
以下是我使用的场景,或许是我使用有问题,还请指出

while(x)
{
cin >> x;
char a;
while ((a = getchar()) != '\n');
......
......
}

问题确实解决了,但是后面再继续输入时,cin直接跳过去了

while(x)
{
cin >> x;
char a;
while ((a = getchar()) != '\n');
cin >> x;
......
......
}

也就是说缓冲区仍有内容?

以上这种问题,以我目前的水平,能想到的解决方案只有

getchar与clear一起用,即在获取输入后使用getchar,然后使用cin.clear();复位位置标志
(目前仍有一个问题,这样使用时,如果输入(数字+非数字)时,会正确读取非数字前的数字)
以本人目前水平暂时无法解决

你可能感兴趣的:(c++,开发语言)