【问题标题】:C++ break command kills exe application [duplicate]C ++ break命令杀死exe应用程序[重复]
【发布时间】:2021-03-15 18:44:46
【问题描述】:

我正在学习编程,并且我编写了一个代码来平均我想要的尽可能多的数字。该代码在 Visual Studio 中完美运行,但是当我尝试使用 exe 文件运行它时,它会在我输入“end”后死掉。我使用“结束”来打破循环(第 23 行)。

#include <iostream>
#include <string>
using namespace std;

int main()
{
string n = "";
double a = 0;
double counter = 0;
string list = "0123456789.";
int b = 0;
char betu = '\0';
int num = 0;
double value = 0;
while (true) {
    betu = '\0';
    n = "";
    a = 0;
    b = 0;
    cout << "Send in a number:" << endl;
    cin >> n;
    b = n.length();
    if (n == "end") {
        break;
    }
    for (int i = 0; i < b; i++) {
        if (list.find(n[i]) == string::npos) {
            cout << "The number is not correct.";
            exit(EXIT_FAILURE);
        }
    }
    a = stod(n);
    counter += a;
    num++;
}
if (num == 0) {
    cout << "not enough numbers to count with." << endl;
}
else {
    value = counter / num;
    cout << "The avarage of your results is: " << endl;
    cout << value << endl;
}
return 0;
}

我希望“结束”退出循环并在循环后继续程序。

【问题讨论】:

  • 更清楚:它正在在循环之后运行代码。
  • 从命令行运行应用程序。
  • @Yksisarvinen 我尝试了在那篇文章中写的方法,例如 system("pause");或 getchar();在主要功能的最后,但他们都没有解决我的问题。我尝试使用 ctrl + f5 运行它(无需调试即可运行)并且它可以工作,但是当我打开 exe 时它仍然无法工作。所以它似乎只适用于 Visual Studio。
  • @VargaÁgoston 你把系统放在哪里(“暂停”)?

标签: c++ while-loop break


【解决方案1】:

所以我替换后返回0;使用 system('pause"); 它起作用了。我在代码中留下了 return 0; 这就是它第一次不起作用的原因。

【讨论】:

  • 您必须在return 0; 之后而不是之前添加system("pause");。如果是这样,请记住,一旦代码返回函数,函数就会结束。返回后不会执行该函数的其他代码。
【解决方案2】:

对不起,如果我误解了您的问题,但我相信您是在问如何在输入“end”以产生结果后继续输入数字。

当在任何循环中发现 break 语句时,它会立即终止封闭循环,即使它包含在嵌套条件语句中。如果您想在不退出 while 循环的情况下退出条件语句,则需要使用“继续”语句。下面我举一个例子来说明如何解决你的问题。我还删除了“使用命名空间 std”,因为它通常不被认为是最佳实践,并删除了一些多余的分配,但可能不是全部,因为我有点着急。

最好在满足定义的条件时通过返回 false 来结束 while 循环,我已经举例说明了如何在输入“终止”将结束程序的新条件中完成此操作。

#include <iostream>
#include <string>

int main()
{
    std::string n;
    double a = 0;
    double counter = 0;
    std::string list = "0123456789.";
    int b = 0;
    char betu = '\0';
    int num = 0;
    double value;

    while (true) {
        std::cout << "Send in a number:" << std::endl;
        std::cin >> n;

        b = n.length();

        if (n == "end") 
        {
            if (num == 0)
            {
                std::cout << "not enough numbers to count with." << std::endl;
            }
            else 
            {
                value = counter / num;
                std::cout << "The avarage of your results is: " << std::endl;
                std::cout << value << std::endl;
            }
            continue;
        }

        else if (n == "terminate")
        {
            return false;
        }

        for (int i = 0; i < b; i++) {
            if (list.find(n[i]) == std::string::npos) {
                std::cout << "The number is not correct.";
                exit(EXIT_FAILURE);
            }
        }

        a = std::stod(n);
        counter += a;
        num++;
    }
    return 0;
}

【讨论】:

  • 谢谢!它解决了我的问题。我在代码中写了 system("cls") 以使其更清晰。
猜你喜欢
  • 2015-12-22
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多