【问题标题】:Why am I stuck in a while loop?[c++]为什么我卡在一个while循环中?[c++]
【发布时间】:2016-12-10 17:24:02
【问题描述】:

我在这里陷入了一个循环。我有一个用零填充的矩阵,我想在图中添加 k 个边。我在 Visual Studio 中没有显示错误。当它进入这行代码时:

int z = 0;
    while (z!=k);
    {
        int a = std::rand() % n;
        int b = std::rand() % n;
        if ((v[a][b] != 1) && (a != b))
        {
            v[a][b] = 1;
            v[b][a] = 1;
            z++;
        }
    }

程序陷入无限循环;

这里是完整的代码:

std::vector<std::vector<int>> random_gnk(int n, int k)
{
    srand(time(NULL));
    int temp = 0;
    for (int i = 0; i < n; i++)
    {
        temp = temp + i;
    }
    std::vector<std::vector<int>> v;
    if (k > temp || k<0)
    {
        std::cout << "Blad. Podano zla liczbe krawedzi." << std::endl;
        return v;
    }
    for (int i = 0; i < n; i++)
    {
        std::vector<int>row;
        for (int j = 0; j < n; j++)
        {
            row.push_back(0);
        }
        v.push_back(row);
    }

    int z = 0;
    while (z!=k);
    {
        int a = std::rand() % n;
        int b = std::rand() % n;
        if ((v[a][b] != 1) && (a != b))
        {
            v[a][b] = 1;
            v[b][a] = 1;
            z++;
        }
    }
    return v;
}
void GNK()
{
    int n, k;
    std::cout << "Podaj wielkosc n grafu: " << std::endl;
    std::cin >> n;
    std::cout << "Podaj liczbe k krawedzi grafu: " << std::endl;
    std::cin >> k;
    print_matrix(random_gnk(n, k));
    return;
}

【问题讨论】:

  • 我们能看到 n、v 和 k 的声明吗?
  • 当您使用调试器单步执行此操作时会发生什么?
  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • 除了未知变量的定义,还请说明你是如何初始化它们的,它们的值是什么。
  • 当我使用调试器时它在 while (z!=k); 之后卡住了{

标签: c++ vector random graph


【解决方案1】:

将您的代码通过clang-format:

  int z = 0;
  while (z != k)
    ;
  {

这应该很清楚:去掉分号!

有一个在线格式化程序here。如果您喜欢它,请使用您的 IDE 或代码编辑器进行设置。它会解决这样的问题,让你的代码更漂亮。

【讨论】:

  • 天哪,我现在感觉好傻。这是一个简单的;成功了,非常感谢!
  • :) 说真的 - 使用 clang-format。让编码更有趣!
  • 我将此问题标记为关闭,因为它是一个简单的错字 - 但也许它应该作为流浪;s 是一个经常发生的问题。
猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
相关资源
最近更新 更多