Goto и Junping цикл с помощью цикла C ++ - PullRequest
0 голосов
/ 16 ноября 2018

Я новый программист и пользователь здесь. Я не хочу использовать 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");
}

Скриншот

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Нет необходимости создавать функцию, замените «goto» на «j = -1;»

0 голосов
/ 16 ноября 2018

Заменить

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)

0 голосов
/ 16 ноября 2018

Просто замените блок come (внутренний цикл цикла) на функцию.Затем вместо goto come вы вызываете come() (при условии, что имя функции - "come").

...