修复C开关语句函数溢出?

修复C开关语句函数溢出?,c,switch-statement,C,Switch Statement,因此,基本上,当我编译它并执行代码并选择各种情况时,它将一次执行多个函数并一次输出多个语句。假设我选择了案例1,它的输出会打印一些东西,但当我选择案例2时,它会打印 一点 2点 当我选择案例3时,它会打印出来 一点 2点 三点 那么,我如何修复代码以脱离循环呢?我认为break语句只能让它一次执行一个函数。是的,我的代码中没有包含引用我的typedef结构的东西。为什么要在函数中输入东西。您发布的代码也不会编译 名称中还有一个空白,并且缺少函数something\u t do\u somethi

因此,基本上,当我编译它并执行代码并选择各种情况时,它将一次执行多个函数并一次输出多个语句。假设我选择了案例1,它的输出会打印一些东西,但当我选择案例2时,它会打印 一点 2点

当我选择案例3时,它会打印出来 一点 2点 三点


那么,我如何修复代码以脱离循环呢?我认为break语句只能让它一次执行一个函数。是的,我的代码中没有包含引用我的typedef结构的东西。

为什么要在函数中输入东西。您发布的代码也不会编译

名称中还有一个空白,并且缺少函数something\u t do\u something 1(void)的函数类型。

print\u case()具有开关。它做了自己的事情,然后返回。main()中的函数原型实际上只是调用。所以它叫他们。所以你可以看到所有的函数都在执行。C有耸耸肩的习惯,因为传统上它是非常宽容的。将“原型”移到main()之前,最好在所有原型上都加上正确的签名

您的do_something2有一个arg,但您没有在(非工作)伪原型中声明它-也就是说,一旦您将其移到before main()之前,它将是不正确的


另外,既然您已经声明dou_something2()接受arg,那么最好通过一个

这是你的代码的干净版本,我想这可能会帮助你记住一些东西

   int main (void)
   {
    */ function prototypes */
    print_case();
    do_something1();
    do_something2();
    do_something3();
    do_something4(); 
    exit_program();
    program_invalid();
    }

    void print_case (void)  
   {  
    int i; 

    printf("\n"
           "1. Do Something 1\n"
           "2. Do Something 2\n"
           "3. Do Something 3\n"
           "4. Do Something 4\n"
           "5. Exit the program\n"
           "Enter choice (number between 1-5)>\n");
    scanf("%d", &i); 

    switch(i)
    {
    case 1:
        do_something1();
        break;
    case 2:
        do_something2();
        break;
    case 3:
        do_something3();       
        break;
    case 4:
        do_something4();       
        break;
    case 5:
        exit_program(); 
        break;
    default:
        program_invalid();
        break;
    }

    return;

}

something_t do_something1(void)
{
    something_t something;
    printf("Something 1\n");    
    return something;
}

void do_something2(something_t something)
{
    printf("Something 2\n");
}

void do_something3()
{
    printf("Something 3\n");
}

void do_something4()
{
    printf("Something 4\n");
}

void exit_program (void) 
{
    exit(0);
}

void program_invalid (void)
{
    printf("Not valid choice");
}
#包括
#包括//以退出。
#定义True 1//符号常量。
/*
*这是一个多行注释。
* -----------------------------
*这就是函数原型的工作原理
*应该是。
*您可以保留参数名称
*空,因为在函数原型中
*参数名是dumy,但不是dumy
*类型。
*/
typedef int something_t;//这里可以有任何结构。
//举个例子。
作废打印件(作废);
做不到的事(空虚);
无效做某事2(某事);
无效做某事3(无效);
无效做某事4(无效);
作废退出程序(作废);
无效程序(无效);
//----这是单行注释。
int main()
{
while(True){
print_case();
}
返回0;
}
作废打印箱(作废)
{
int i;
printf(“\n”
“1.做点什么1\n”
“2.做点什么2\n”
“3.做点什么3\n”
“4.做点什么4\n”
“5.退出程序\n”
“输入选项(1-5之间的数字)>\n”);
scanf(“%d”、&i);
开关(一){
案例1:
做点什么;
打破
案例2:
do_something2(True);//必须通过结构。
打破
案例3:
做点什么;
打破
案例4:
做点什么;
打破
案例5:
退出_程序();
打破
违约:
程序_无效();
打破
}
返回;
}
做不到的事(无效)
{
有事,有事,;
printf(“某物1\n”);
归还某物;
}
虚空做某事2(某事)
{
printf(“某物2\n”);
}
无效做某事3(无效)
{
printf(“某物3\n”);
}
无效做某事4(无效)
{
printf(“某物4\n”);
}
作废退出程序(作废)
{
出口(0);
}
无效程序\u无效(无效)
{
printf(“无效选择”);
}

这不是真正的代码,它有语法错误,无法编译。你必须
返回一些东西在函数外部,上一个函数中缺少引号。而且开关不可能按照你说的做。是的,让我修复我的打字错误,这说明了问题。确保有一个
main()
函数可以调用。@Barmar my bad
要获得要编译的代码,它应该运行良好。
#include <stdio.h>
#include <stdlib.h> // for exit.
#define True 1 // Symbolic constants.
/*
 * This is a multi-line comment.
 * -----------------------------
 *  These is how a function prototype
 *  should be.
 *  You can leave the parameter names
 *  empty because in function prototypes
 *  the parameter names are dumy but not
 *  the types.
 */
 typedef int something_t; // You can have any structure here.
                          // just for an example.
 void print_case(void);
 something_t do_something1(void);
 void do_something2(something_t);
 void do_something3(void);
 void do_something4(void);
 void exit_program (void);
 void program_invalid (void);
 // ---- This is a single line comment.

 int main()
 {
   while(True) {
   print_case();
   }
   return 0;
 }

void print_case (void)
{
 int i;

 printf("\n"
       "1. Do Something 1\n"
       "2. Do Something 2\n"
       "3. Do Something 3\n"
       "4. Do Something 4\n"
       "5. Exit the program\n"
       "Enter choice (number between 1-5)>\n");
 scanf("%d", &i);

 switch(i) {
 case 1:
     do_something1();
     break;
 case 2:
     do_something2(True); // must pass your struct.
     break;
 case 3:
     do_something3();
     break;
 case 4:
     do_something4();
     break;
 case 5:
     exit_program();
     break;
 default:
     program_invalid();
     break;
 }

 return;

}

something_t do_something1(void)
{
    something_t something;
    printf("Something 1\n");
    return something;
}

void do_something2(something_t something)
{
    printf("Something 2\n");
}

void do_something3(void)
{
    printf("Something 3\n");
}

void do_something4(void)
{
    printf("Something 4\n");
}

void exit_program (void)
{
    exit(0);
}

void program_invalid (void)
{
    printf("Not valid choice");
}