清除cin缓冲区

时间:2015-07-04 09:27:29

标签: c++ input console

我正在制作这款控制台蛇游戏。当蛇死亡时,我使用重复的清除控制台<img height="200" id="slide" src="http://www.w3schools.com/html/html5.gif" width="400" />使屏幕闪烁三次并打印。

然后调用Sleep()将分数插入文件中。

它将这样的内容打印到控制台中,然后等待用户输入他们的名字:

insert_hscore

但控制台上显示的是:

You scored <'SCORE'>
Enter your name

其中You scored <'SCORE'> Enter your name ddwsad 或类似内容是用户在闪烁期间按下的键。如何防止出现这种情况?

1 个答案:

答案 0 :(得分:0)

这意味着您的输入缓冲区中可能仍有未读的字符。这里通常的解决方案是使用ignore忽略这些字符。

虽然这可能要求您在输入名称之前让用户按下输入(或空格或其他)。然后你可以忽略所有内容,直到并包括下一个换行符:

std::cin.ignore(
    std::numeric_limits<std::streamsize>::max(),
    '\n');

否则,由于阅读的字符没有任何时间戳,因此难以区分&#34; a&#34;那仍然是一个命令和一个&#34; a&#34;作为名称的一部分。

虽然可能在正确的时间切换输入缓冲区可能是另一种值得尝试的方法。