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

在C编程中如何在函数和main()之间跳转,c,function,C,Function,如何从另一个子函数返回到主函数? 在C语言编程中 在main()中,询问用户是想要游戏还是计算器。 例如,如果他选择游戏,他将参加功能游戏 当他在游戏功能中时,他可以选择他想要的游戏或返回 显示游戏和计算器的主菜单 例如: 我成功地返回到以前的函数,除了main()中指向的函数 我试图定义一个全局变量,并在main()内的while循环中使用它,以便进行更改 从任何函数都可以返回代码的任何部分 这似乎很容易,但我已经失去了耐心,因为我整天都在尝试 做这件事,这就是为什么我想从你那里得到一点提示

如何从另一个子函数返回到主函数? 在C语言编程中

在main()中,询问用户是想要游戏还是计算器。 例如,如果他选择游戏,他将参加功能游戏 当他在游戏功能中时,他可以选择他想要的游戏或返回 显示游戏和计算器的主菜单

例如:

我成功地返回到以前的函数,除了main()中指向的函数

我试图定义一个全局变量,并在main()内的while循环中使用它,以便进行更改 从任何函数都可以返回代码的任何部分

这似乎很容易,但我已经失去了耐心,因为我整天都在尝试 做这件事,这就是为什么我想从你那里得到一点提示


非常感谢。

您可以从
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;
}

更清楚地说,您可以通过在
f()
g()
h()
函数末尾返回新状态,从全局状态变量切换到局部状态变量。

您可以从
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;
}

更清楚地说,通过在
f()
g()
h()
函数末尾返回新状态,可以从全局状态变量切换到局部状态变量。

返回到
main
函数的方式取决于您声明其他函数的方式:

  • 如果您声明函数
    void function(…)
    ,那么您可以在任何时候简单地
    返回
    ,或者允许控制从函数的末尾运行—编译器将自动返回调用函数

  • 如果声明函数返回值
    int函数(…)
    char*函数(…)
    ,则必须
    返回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);
}
#包括
#包括
#定义SNAKE 1
#定义画师2
虚空游戏_snake(){
/*玩蛇游戏*/
返回;
}
无效播放{
/*西斯廷教堂时间*/
返回;
}
int提示_进行_选择(){
字符选择[10];
看跌期权(“请做出选择”);
认沽权(“”);
看跌期权(“1玩蛇”);
puts(“2个游戏画家”);
fgets(精选、sizeof(精选)、stdin);
返回strtol(选项,空,10);
}
int main(int argc,char*argv[]){
智力选择;
choice=提示_输入_选项();
如果(选项==蛇){
玩蛇游戏();
}else if(选项==油漆工){
扮演画家();
}否则{
printf(“内部错误,无效选项%d\n”,选项);
出口(1);
}
出口(0);
}
请注意,
main
没有什么特别之处。这只是另一个功能


我强烈建议买一本关于C的好书。我最喜欢的“第一本书”是。请务必获得第二版,因为第一版描述了该语言的早期版本。(第一版的阅读可能仍然很有趣,但不能准确地表示当前使用的C语言。)

如何返回到
主函数取决于您如何声明其他函数:

  • 如果您声明函数
    void function(…)
    ,那么您可以在任何时候简单地
    返回
    ,或者允许控制从函数的末尾运行—编译器将自动返回调用函数

  • 如果声明函数返回值
    int函数(…)
    char*函数(…)
    ,则必须
    返回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);
}
#包括
#包括
#定义SNAKE 1
#定义画师2
虚空游戏_snake(){
/*玩蛇游戏*/
返回;
}
无效播放{
/*西斯廷教堂时间*/
返回;
}
int提示_进行_选择(){
字符选择[10];
看跌期权(“请做出选择”);
认沽权(“”);
看跌期权(“1玩蛇”);
puts(“2个游戏画家”);
fgets(精选、sizeof(精选)、stdin);
返回strtol(选项,空,10);
}
int main(int argc,char*argv[]){
智力选择;
choice=提示_输入_选项();
如果(选项==蛇){
玩蛇游戏();
}else if(选项==油漆工){
扮演画家();
}否则{
printf(“内部错误,无效选项%d\n”,选项);
出口(1);
}
出口(0);
}
请注意,
main
没有什么特别之处。这只是另一个功能


我强烈建议买一本关于C的好书。我最喜欢的“第一本书”是。请务必获得第二版,因为第一版描述了该语言的早期版本。(第一版的阅读可能仍然很有趣,但并不能准确地表示当前使用的C语言。)

在主功能中,只需调用调用调用所有子菜单的菜单函数,在子菜单中,您可以调用
#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
}