Я сделал эту программу, чтобы научиться использовать Goto. но сделал некоторые ошибки где-то - PullRequest
0 голосов
/ 30 апреля 2020

здесь я использовал «goto», и когда я вызываю одно goto как name1 с другими значениями gotos. как и все имя1 имя2 имя3 имя4. Помогите !!!

#include<stdio.h>
int main(){
    int num;
    printf("Name number\n");
    scanf("%d",&num);

    if(num==1)
    goto name1;
    else
    goto name2;
    name1:
      printf("M");
    name2:
      printf("A");
    name3:
      printf("I");
    name4:
      printf("Y");

    return 0;
}

если я задаю значение 1 или 2, оно показывает MAIY

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

", когда я называю один goto как name1 с, если еще это все значения gotos. Как все name1 name2 name3 name4. Help !!! "

Кажется, вы неправильно понимаете использование goto. Метка goto не задает определенную группу операторов (составной оператор / блок) или просто один оператор с ним, как если бы конкретное условие соответствовало цепочке if / elseif или switch / case оператор.

Оператор goto name1 просто позволяет перейти в положение метки name1. Ни больше ни меньше.

Если вы хотите достичь того, что вы описали, используйте switch, например:

#include<stdio.h>

int main(){

    int num;
    printf("Name number\n");
    scanf("%d",&num);

    switch(num) {

    case 1:
      printf("M");
      break;

    case 2:
      printf("A");
      break;

    case 3:
      printf("I");
      break;

    case 4:
      printf("Y");
      break;

    default:
      break;

    }

    return 0;
}

Обратите внимание, что использование goto, как вы это сделали, обычно не рекомендуется.

Вы должны взглянуть на эти сообщения:

Всегда ли выгодно использовать 'goto' в языке, который поддерживает циклы и функции? Если так, то почему?

GOTO по-прежнему считается вредным?

1 голос
/ 30 апреля 2020

Если вы хотите использовать switch, вы можете сделать это как ответ @Roberts. Но если вы все еще хотите использовать goto для этого случая, вы можете добавить новую метку после каждой функции printf, чтобы отделить оператор, который вы не хотите выполнять. Например:

#include<stdio.h>

int main(){
    int num;
    printf("Name number\n");
    scanf("%d",&num);

    if(num==1)
       goto name1;
    else
       goto name2;
    name1:
      printf("M");
      goto end_name;
    name2:
      printf("A");
      goto end_name;
    name3:
      printf("I");
      goto end_name;
    name4:
      printf("Y");
    end_name:
       printf("\nHello World ===> Do something else from here\n");
    return 0;
}

Вывод как:

Name number                                                                                                             
1                                                                                                                       
M                                                                                                                       
Hello World ===> Do something else from here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...