为什么当我输入字符时,这个特定的 cin.get() 语句在C++中不起作用?

Why does this particular cin.get() statement not work in C++ when I input a char?

本文关键字:get cin 语句 不起作用 C++ 字符 输入 为什么      更新时间:2023-10-16

我的问题是我试图制作一个菜单作为程序的一部分。有用于输入的条件语句,我的else语句应该说输入无效,并等待输入(以便让用户知道他们输入的内容无效(。

这是相关的片段,以及我尝试过的:

void main_menu() {
int opt;
system("CLS");
std::cout << "Main Menu" << std::endl;
std::cout << "nnWhat would you like to do?" << std::endl;
std::cout << "1) Fight" << std::endl;
std::cout << "2) Store" << std::endl;
std::cout << "3) Exit" << std::endl;
std::cin >> opt;
std::cin.ignore();
if (opt == 1) {
return main_menu();
}
else if (opt == 2) {
return main_menu();
}
else if (opt == 3) {
return;
}
else {
system("CLS");
std::cout << "Invalid!" << std::endl;
std::cin.get(); //error, but not seen in list or console
}
}
int main() {
main_menu();
return 0;
}

我似乎搞砸了的是else.当我运行它时,代码似乎传递了我设置的std::cin.get()

我想要的输出:

Input = 1 // valid input
go to statement 1 (empty for time being.)
Input = 6 // invalid, but is handled with the else:
cout << "Invalid!" << ....
//pause
Input = 'a' //invalid, should be like above:
cout << "Invalid!" << ....
//pause // in reality, it passes

我已经尝试了一些方法,并在 SO 以外的站点上查看了一些帖子(请参阅帖子为什么在我包含 cin.get(( 后控制台关闭? (我已经尝试了cin >> var方法之后的cin.ignore(),不起作用(,但没有一个工作。

它确实说了换行符之类的,但我不明白。有人可以解释尾随换行符的工作原理,为什么我的代码段不起作用?

编辑:其他cin.get()语句在我的实际代码中起作用。

编辑:我尝试输入除数字以外的无效选项,但它不起作用(例如,字符(。不过数字有效。所以现在的问题是关于处理除整数、浮点数、双精度等以外的数据类型。

默认情况下,ingore 只会忽略 1 个字符。在窗口 \r 和 中输入后至少有 2 个字符。

你最好做:

cin.ignore(999,'n')