c++ - C++ - 为什么我的程序在再次调用函数后关闭?
问题描述
我是 C++ 新手,无法弄清楚这里发生了什么......
基本上我有一个带有一堆 Log("...") 语句(基于文本的冒险)的函数,然后我想基本上创建一个 try-catch 块来查看用户是否尝试打印任何不是 1或 2 因为这些是仅有的 2 个选择。我注意到,当您将字符串输入控制台时,它会将其转换为 0,所以基本上我的代码是-
void myfunciton()
{
top:
Log("Choose...");
Log("(1) ...");
Log("(2) ...");
std::cout << std::string(11, '\n') << std:endl;
std::cout << "Enter a number: ";
std::cin >> userchoice; // Userchoice is a global variable defined above and set to 100.
if (userchoice == 0) {
userchoice = 100;
goto top;
}
而不是 goto top 行;我也尝试调用 myFunction(); 但它给了我同样的结果......代码再次运行,我看到了我的故事,但我不能输入另一个数字。它在我的控制台中打印出“输入一个数字:”行,但随后立即打印“以代码 0 退出,按任意键关闭...”
我只是不明白为什么它不让我再次输入另一个数字。任何帮助,将不胜感激 :)
解决方案
因为数字提取器在输入缓冲区中留下了非数字。尝试这个:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
并避免使用 goto-s。
您也可以使用:while (std::cin >> x)
(x 用于您的输入)以获得更好的代码流。
推荐阅读
- python - 如何使用分配不同颜色的散点图绘制多个分类数据?
- javascript - JavaScript:接受除法函数作为返回新函数的另一个函数的参数->返回商
- inheritance - 如何设置基本测试环境以便与继承类一起使用?
- qt - QML 无法锚定到布局中的项目
- java - Android 通知通道说明
- excel - 与行和列中的数据匹配的查找公式
- django - 为什么我不能向数据库提交双重表格
- python - 如何确保只有一个进程在 python 多进程中运行一个函数?
- java - 我如何使用电报库进行身份验证并将消息发送到我在 java 中的电话号码?
- python - 为什么在 docker-compose 中使用 python 的 ConnectionError?