Как выйти из вложенных циклов в C? - PullRequest
0 голосов
/ 27 марта 2020

Я хочу выйти из вложенного , а в C, чтобы вернуться к основной функции. Но я не знаю, как это сделать. Я имею в виду, что в моем коде я хочу использовать инструкцию (за исключением инструкции goto , потому что я хочу создать процедурную программу), чтобы разорвать эти два цикла и вернуться к основной функции.

Это мой код:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main()
{
     float *Score = (float*) malloc (5 * sizeof (float));
     if (!Score)
     {
         printf("An error occurred while allocating memory.\n");
         exit(1);
     }

     char *Character = (char*) malloc (sizeof (char));
     if (!Character)
     {
        printf("An error occurred while allocating memory.\n");
        exit(2);
     }

     int Counter = 0; 
     while (Counter < 5)
    {
        printf("Enter your number %d : ", Counter + 1);
        scanf("%f", (Score + Counter));
        system("cls");

        if (Counter == 5 - 1)
        {
            break;
        }

        while (1)
        {
        printf("Do you want to continue? ");
        *Character = getch();
        system("cls");

        if (*Character == 'y')
            break;

        else if (*Character == 'n'); // I don't know what do I do here?

        else
        {
            printf("Press enter \'y\' or \'n\'\n");
            continue;
        }
    }

    Counter++;
}

Counter = 0;

while (Counter < 5)
{
    printf("%2.2f - ", *(Score + Counter));
    Counter++;
}

getch();

return 0;
}

Я хочу создать процедурную программу и по этой причине не могу использовать инструкцию goto . Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 27 марта 2020

Во-первых, добавьте оператор break внутри этого условия во вложенном состоянии, в то время как l oop:

else if (*Character == 'n')
    break;

Затем, после окончания этого вложенного while-l oop, добавьте то же условие внутри вложенный while-l oop, чтобы выйти из него и вернуться к основной функции:

if (*Character == 'n')
    break;

Это не будет работать, если Character было объявлено внутри вложенного l oop.

В качестве альтернативы (в лучшем случае), в вашем случае вы также можете установить условие терминала для вложенного while-l oop внутри этого условия во вложенном while-l oop перед тем, как выйти из него. Это гарантирует, что вложенный l oop не будет повторяться дальше:

else if (*Character == 'n')
{
    Counter = 5; // condition of the enclosed while-loop becomes false
    break;       // breaks out of the nested while-loop
    // altogether, you break out of both the loops
}


...