gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:09:43 25 4
gpt4 key购买 nike

   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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com