为什么当我输入字符时,这个特定的 cin.get() 语句在C++中不起作用?
Why does this particular cin.get() statement not work in C++ when I input a char?
我的问题是我试图制作一个菜单作为程序的一部分。有用于输入的条件语句,我的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')
相关文章:
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 使用 cin.get() 初始化字符数组
- 编写 cin.get() 以接收字符数组时出现问题
- 使用 cin.get 读取字符数组
- cin.get()的返回类型
- 在循环中使用 cin.get() 输入字符串
- 为什么 cin.get(char, int) 不会溢出?
- cin.get() 导致"no instance of overloaded function"错误
- 为什么当我输入字符时,这个特定的 cin.get() 语句在C++中不起作用?
- 为什么程序在 cin 之后跳过 cin.get()?
- 如何终止 std::cin.get() 的 ''
- 使用 cin.get() 读取字符
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- cin.get()函数在C 中
- 如何在 c++ 中使用 cin.get() 给出更多数字?
- (m = cin.get())!=EOF&m = cin.get()!=EOF 之间的差异
- 为什么我的应用程序即使我的应用程序也关闭,即使我有cin.get();
- C 使用CIN.Get()暂停此程序
- cin.get() 之后的回车;C++
- 我是否缺少 cin.get() 的东西