c - 修复 C switch 语句函数溢出?

标签 c switch-statement

   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");
}

所以基本上当我编译它并执行代码并选择各种情况时,它会一次执行多个函数并一次打印出多个语句。假设我选择情况 1,它会打印 Something 1,但是当我选择情况 2 时,它会打印 东西 1 东西2

当我选择情况 3 时,它会打印 东西 1 东西 2 东西3

那么我该如何修复我的代码以摆脱循环呢?我认为break语句只会让它一次执行一个函数。是的,some_t 引用了我的 typedef 结构,但我没有将其包含在代码中。

最佳答案

print_case() 有开关。它做它的事情然后返回。您认为 main() 中的函数原型(prototype)实际上只是调用。所以它调用他们。这样您就可以看到所有函数都在执行。 C 习惯于耸耸肩并使其发挥作用,因为传统上它非常宽容。将您的“原型(prototype)”移至 main() 之前,并最好在它们上加上正确的签名。

你的 do_something2 有一个参数,但你没有在(非工作的)假原型(prototype)中声明它 - 也就是说,一旦你将它移到 main() 之前,它就会不正确。

此外,由于您已声明 do_something2() 接受一个参数,因此最好传递一个!

关于c - 修复 C switch 语句函数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50109722/

相关文章:

c - c 中的失败案例是如何工作的?

java - switch语句有帮助吗?

java - 仍然有 NullPointerException 错误

C语言switch-case : avoiding a case after used once

c - NULL 后面是什么?

c - 使用 fork() 运行多个任务

C: 十六进制输出是 "ffff"?

parallel-processing - 处理 CUDA 中的大型 switch 语句

c - memset 的 64 位 Linux 性能问题

c# - 有谁知道任何进行音频合成器仿真的 C/C++/C# 代码库?