我有下一个代码:
char shapetype;
std::cout << "which shape would you like to work with?" << std::endl;
std::cin >> shapetype;
switch (shapetype) {
case 'c':
std::cout << "enter color, name, rad for circle" << std::endl;
std::cin >> col >> nam >> rad;
如果我在第2行中为示例'cemfkem'编写,则在shapetype中,我有c并且字符串的另一部分留在缓冲区中,因此当我进入col,nam和rad时,缓冲区进入col内字符串的其他部分。如何清洁缓冲液?
答案 0 :(得分:1)
因此,您正在使用cin
来获取单个字符,并且由于用户输入的是废话,缓冲区中仍然存在垃圾。
摆脱这种情况的方法是使用cin.ignore()
。 cin.ignore()
接受2个参数,一个整数,表示要忽略的字符数,以及一个定界符,如果到达该字符,它将基本上清除缓冲区。
您可能希望使用cin.ignore(<A REALLY BIG NUMBER>, '\n');
,以便缓冲区可以清除很长一段时间,或者直到到达返回字符为止,以先发生的为准。
代替使用硬编码的大数字,您可以像这样获取缓冲区的最大大小:
//include this with your other #includes
#include <limits>
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');