如何在C编程中跳转函数和main()

时间:2011-10-22 03:08:04

标签: c function

如何从其他子功能返回主函数? 在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()中指向的函数。

我尝试定义一个全局var并在main()内的while循环中使用它以便更改 它可以从任何函数中返回我的代码的任何部分。

看起来很容易,但我已经失去了耐心,因为我整天都在努力 做这件事,这就是为什么我要向你寻求一点暗示。

非常感谢你。

3 个答案:

答案 0 :(得分:4)

您可以通过从main()最近调用的函数返回来返回main函数。请注意,您不是调用 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()函数末尾返回新状态来从全局变量切换到本地状态变量。

答案 1 :(得分:2)

如何返回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的好书。我最喜欢的“第一本书”是The C Programming Language。请务必获得第二版,因为第一版描述了该语言的早期版本。 (第一版可能仍然很有趣,但并不能准确地代表今天使用的C语言。)

答案 2 :(得分:0)

在您的主要功能中,只需调用一个调用所有子菜单的菜单功能,在子菜单中,您可以回调主功能中的菜单功能。也是一个新手,但希望这有帮助

#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
}