Замена для goto в корпусе переключателя - PullRequest
0 голосов
/ 05 октября 2018

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

//I want the program of be infinite until you want to exit.Thus I used goto to continuously loop it back to either main menu or the mathematical operation you are in. 
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

int a,b,i,num,n;
char rep;
void main (void)

{
//main menu-(main:-for goto function)
main:
{
printf("\nMAIN MENU\n\n1. Factorial\n2. Sum\n3. Odd/Even\n4. Prime Number\n5. Multiplication\n6. Exit\n");
scanf("%d", &n);
}
switch (n)
{
    case 1:
        {
            fact:
            {
            printf("Number- ");
            scanf("%d", &num);
            a=1;
        for(i=1;i<=num;i++)
        {
            a=a*i;
            continue;
        }
        printf("\nFactorial of %d= %d\n\n", num, a);

//This is how I loop it back to main menu or for repeating the mathematical operation using combination of conditional operators and goto.
        printf("Repeat? y/n- ");
        fflush(stdin);
        scanf("%c", &rep);
        (rep=='y')?({goto fact;}):({goto main;});
        }
        }
    case 2:
        {
            sum:
            {
                a=0;
            printf("Value of repetitions- ");
            scanf("%d", &num);
            printf("Enter Digits to sum:\n");

            for(i=1;i<=num;i++)
            {
                scanf("%d", &b);
                printf("+ ");
                a=a+b;
                continue;
            }
            printf("\nThe Sum of Digits= %d\n\n", a);
            printf("Repeat? y/n- ");
            fflush(stdin);
            scanf("%c", &rep);
            (rep=='y')?({goto sum;}):({goto main;});
            }
        }

    case 3:
        {
            oe:
            {
                printf("Enter a Number- ");
                scanf("%d", &a);
                (a%2==0)?(printf("\n%d is an Even Number\n",a)):(printf("\n%d is an Odd number\n", a));
            printf("\nRepeat? y/n- ");
            fflush(stdin);
            scanf("%c", &rep);
            (rep=='y')?({goto oe;}):({goto main;});
            }
        }
    case 4:
        {
            prime:
                {
                    printf("\nEnter a Number- ");
                    scanf("%d",&num);
                    if(num==2)
                        printf("\n\n%d is a Prime Number\n\n", num);

                    for(i=2;i<=num-1;i++)
                    {

                        (num%i==0)?({printf("\n\n%d is Not a Prime Number.\n\n", num);break;}):({printf("\n\n%d is a Prime Number\n\n", num);break;});

                    }

                    printf("\nRepeat? y/n- ");
                    fflush(stdin);
            scanf("%c", &rep);
            (rep=='y')?({goto prime;}):({goto main;});
                }

        }
    case 5:
        {
            mul:
            {
                a=1;
            printf("Value of repetitions- ");
            scanf("%d", &num);
            printf("Enter Digits to multiply:\n");

            for(i=1;i<=num;i++)
            {
                scanf("%d", &b);
                printf("* ");
                a=a*b;
                continue;
            }
            printf("\nThe Multiplication of Digits= %d\n\n", a);
            printf("Repeat? y/n- ");
            fflush(stdin);
            scanf("%c", &rep);
            (rep=='y')?({goto mul;}):({goto main;});
            }
        }
//Case 6 is only for aesthetic reasons.
        case 6:
        printf("\n\nPress Enter\n\n");
}
}

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Учитывая тот факт, что вы не хотите изменять вашу программу каким-либо образом, кроме функции goto, вы можете поместить весь свой код в цикл do while, цикл while или цикл for следующим образом:

do {
....
} while(rep != 'y')
0 голосов
/ 06 октября 2018

Получил решение моей проблемы.Заменены несколько Go-to с циклами do-while.Спасибо за предложения @Paul Ogilvie и @Harshit Joshi.Приветствуются любые предложения по улучшению кода!

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

int a,b,i,num,n;
char rep;
void main (void)

{
    do
    {
        printf("\nMAIN MENU\n\n1. Factorial\n2. Sum\n3. Odd/Even\n4. Prime Number\n5. Multiplication\n6. Exit\n\n");
        scanf("%d", &n);

        switch(n)
        {
            case 1:
 //Replaced Goto from here with do while loop
                do
                {
                    printf("\nNumber- ");
                    scanf("%d", &num);
                    a=1;
                    for(i=1;i<=num;i++)
                        {
                            a=a*i;
                            continue;
                        }
                        printf("\nFactorial of %d= %d\n\n", num, a);
                        printf("Repeat? y/n- ");
                        fflush(stdin);
                        scanf("%c", &rep);
                }
                while(rep=='y');
                break;

            case 2:
                do
                {
                    a=0;
                    printf("\nValue of repetitions- ");
                    scanf("%d", &num);
                    printf("Enter Digits to sum:\n");

                    for(i=1;i<=num;i++)
                    {
                        scanf("%d", &b);
                        if(i<num)
                            printf("+ ");
                        a=a+b;
                    }
                    printf("\nThe Sum of Digits= %d\n\n", a);
                    printf("Repeat? y/n- ");
                    fflush(stdin);
                    scanf("%c", &rep);
                }
                while(rep=='y');
                break;

            case 3:
                do
                {
                    printf("\nEnter a Number- ");
                    scanf("%d", &a);
                    (a%2==0)?(printf("\n%d is an Even Number\n",a)):(printf("\n%d is an Odd number\n", a));
                    printf("\nRepeat? y/n- ");
                    fflush(stdin);
                    scanf("%c", &rep);
                }
                while(rep=='y');
                break;

            case 4:
                do
                {
                    printf("\nEnter a Number- ");
                    scanf("%d",&num);
                    if(num==2)
                        printf("\n\n%d is a Prime Number\n\n", num);

                    for(i=2;i<=num-1;i++)
                    {
                        (num%i==0)?({printf("\n\n%d is Not a Prime Number.\n\n", num);break;}):({printf("\n\n%d is a Prime Number\n\n", num);break;});
                    }
                    printf("\nRepeat? y/n- ");
                    fflush(stdin);
                    scanf("%c", &rep);
                }
                while(rep=='y');
                break;

            case 5:
                do
                {
                    a=1;
                    printf("\nValue of repetitions- ");
                    scanf("%d", &num);
                    printf("Enter Digits to multiply:\n");

                    for(i=1;i<=num;i++)
                    {
                        scanf("%d", &b);
                        printf("* ");
                        a=a*b;
                        continue;
                    }
                    printf("\nThe Multiplication of Digits= %d\n\n", a);
                    printf("Repeat? y/n- ");
                    fflush(stdin);
                    scanf("%c", &rep);
                }
                while(rep=='y');
                break;
        }
    }
    while(rep=='n');
//Used the above given condition to continue the loop in Main Menu as well. Works properly.
}
0 голосов
/ 05 октября 2018

Конструкция может быть (только контур):

    do {
        printf("\nMAIN MENU\n\n1. Factorial\n2. Sum\n3. Odd/Even\n4. Prime Number\n5. Multiplication\n6. Exit\n");
        scanf("%d", &n);
        switch (n) {
             case 1:
                  do {
                      //do your stuff
                      printf("repeat?")
                      scanf(" %c", &rep);
                  } while (rep=='y');
                  break;
        }

    } while (n<6);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...