goto 和 junping 循环循环 c++

goto and junping loop by loop c++

我是这里的新程序员和用户。 我不想在我的代码中使用 goto 因为我不想被称为“糟糕的程序员”。 我需要你的经验来摆脱它。

#include <iostream>
#include <time.h>
using namespace std;
int main()
{
    srand(time(NULL));
    int control = 1;
    char a[50], harf[5][10];
    a[0] = 65 + rand() % 26;
    for (int i = 1; i < 50; i++)
    {
        if (i % 2 == 0)
            a[i] = 65 + rand() % 26;
        else
            a[i] = 97 + rand() % 26;
    come:
        for (int j = 0; j < i; j++)
        {
            if (a[i] == a[j])
            {
                if (i % 2 == 0)
                {
                    a[i] = 65 + rand() % 26;    goto come;
                }
                else
                {
                    a[i] = 97 + rand() % 26;    goto come;
                }
            }
            else
                continue;
        }
        cout << a[i]<<" ";
    }

    system("pause");
}

screenshot

只需将 come 块(内部 for 循环)替换为一个函数即可。然后,调用 come() 而不是 goto come(假设函数名称是 "come")。

无需创建函数,将您的 "goto" 替换为 "j = -1;"

替换

come:
    for (int j = 0; j < i; j++)
    {
        if (a[i] == a[j])
        {
            if (i % 2 == 0)
            {
                a[i] = 65 + rand() % 26;    goto come;
            }
            else
            {
                a[i] = 97 + rand() % 26;    goto come;
            }
        }
        else
            continue;
    }

int loop=0;
do
{
    for (int j = 0; j < i; j++)
    {
        if (a[i] == a[j])
        {
            if (i % 2 == 0)
            {
                a[i] = 65 + rand() % 26;
            }
            else
            {
                a[i] = 97 + rand() % 26;
            }
            loop=1;
            break;
        }
        else
            loop=0;
    }
}while(loop);

与其他一些答案相比,这是一种更通用的解决方案。它基于以下认识:当您找到匹配项 (a[i] == a[j]) 时,您只想从顶部再次 运行 主 for 循环。 (您可以通过将 j 设置为 -1 来获得相同的结果,但这不会在所有情况下都有效,如果 j 需要 unsigned 则肯定不会)