首页 > 解决方案 > 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 退出,按任意键关闭...”

我只是不明白为什么它不让我再次输入另一个数字。任何帮助,将不胜感激 :)

标签: c++

解决方案


因为数字提取器在输入缓冲区中留下了非数字。尝试这个:

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

并避免使用 goto-s。

您也可以使用:while (std::cin >> x)(x 用于您的输入)以获得更好的代码流。


推荐阅读