Как перейти между функциями и main () в программировании на C - PullRequest
0 голосов
/ 22 октября 2011

Как я могу вернуться к основной функции из другой подфункции?в программировании на C

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

например:

//prototypes 
function one
function sub_one

main() {

select the function :
games:1
calculator:2 
go to ?(function games)?: .... 
}

//////////////////////////// 
function games { 

select the game :     
snake:1
painter:2
want to go back? yes? main()  
}

//////////////////////////// 
function snake {
  a+b .. get my work done here and i wanna goo back to games()
  want to go back? yes? function games()  
}

Мне удалось вернуться к предыдущим функциям, кроме той, которая указана в main ().

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

Это кажется довольно простым, но я потерял терпение, потому что я потратил весь свой день, пытаясь это сделать.вещь, и именно поэтому я ищу маленький намек от вас.

Большое спасибо.

Ответы [ 3 ]

4 голосов
/ 22 октября 2011

Вы можете вернуться к основной функции, вернувшись из функции, недавно вызванной main(). Обратите внимание, что вы не вызываете main(), вы просто возвращаетесь из своей функции в основную. После выполнения последнего оператора функции следующий оператор является следующим в функции, которая его вызвала.

Я думаю, что вы действительно хотите контролировать, какая функция выполняется, используя некоторую переменную состояния:

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

enum {ff, gg, hh} state = ff;
void f();
void g();
void h();

int main(void)
{
    while(1)
    {
        switch (state)
        {
            case ff:
                f();
            break;
            case gg:
                g();
            break;
            case hh:
                h();
            break;
        }
    }
}

void f()
{
    printf("f()\n");
    state = hh;
}

void g()
{
    printf("g()\n");
    exit(0);
}

void h()
{
    printf("h()\n");
    state = gg;
}

Выход:

$ ./foo 
f()
h()
g()

Проще говоря, вы могли бы перейти от глобальной к локальной переменной состояния, возвращая новое состояние в конце функций f(), g() и h().

2 голосов
/ 22 октября 2011

То, как вы вернетесь к функции main, зависит от того, как вы объявили свои другие функции:

  • если вы объявите функцию void function (...), тогда вы можете просто return влюбой точке или разрешить элементу управления выйти из конца функции - компилятор автоматически вернется к вызывающей функции

  • , если вы объявите функцию для возврата значения int function(...) илиchar * function(...) тогда вы должны return foo; из своих функций - и тип foo должен совпадать с типом возврата функции.Вы не можете просто позволить элементу управления выйти из конца функции.

Некоторые примеры:

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

#define SNAKE 1
#define PAINTER 2

void play_snake() {
    /* play the snake game */
    return;
}

void play_painter() {
    /* sistine chapel time */
    return;
}

int prompt_for_choice() {
    char choice[10];
    puts("Please make a choice");
    puts("");
    puts("1 play snake");
    puts("2 play painter");
    fgets(choice, sizeof(choice), stdin);
    return strtol(choice, NULL, 10);
}

int main(int argc, char* argv[]) {
    int choice;

    choice = prompt_for_choice();

    if (choice == SNAKE) {
        play_snake();
    } else if (choice == PAINTER) {
        play_painter();
    } else {
        printf("internal error, invalid choice %d\n", choice);
        exit(1);
    }

    exit(0);
}

Обратите внимание, что в main нет ничего особенного.Это просто еще одна функция.

Я настоятельно рекомендую получить хорошую книгу о C. Моя любимая "первая книга" - Язык программирования C .Обязательно получите второе издание, так как первое издание описывает более раннюю версию языка.(Первое издание может все еще быть забавным чтением, но не точно представляет язык C, как он используется сегодня.)

0 голосов
/ 30 июля 2016

В вашей основной функции просто вызовите функцию меню, которая вызывает все подменю, и, находясь в подменю, вы можете вызвать функцию меню, которая находится в основной функции.Также новичок, но надеюсь, что это поможет

#include<stdio.h>
int menu();
int games();
int calculator();

int main(){//main function starts
  menu();
  return 0;
}
int menu(){
  int choice;
  printf("Select Function\n");
  printf("1. Games\n");
  printf("2. Calculator\n");
  printf("3. Exit\n");

  scanf("%d",&choice);
  switch(choice){
    case 1:
    games();
    break;
    case 2:
    calculator();
    break;
    case 3:
    return 1;
    break;
    default:
    printf("invalid Choice\n");
    return 0;
  }
}
int games(){
  int choice2;
  printf("Select Game\n");
  printf("1. Snake\n");
  printf("2. Painter\n");
  printf("3. Go back to main Menu\n");
  scanf("%d",&choice2);
  switch(choice2){
    case 1:
    printf("Call function for Snake\n");
    ;break;
    case 2:
    printf("Call function for Painter\n");
    break;
    case 3:
    menu();
    default:
    printf("invalid Choice\n");
  }
return 0;
}
int calculator(){
  //code goes here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...