[英]problem with trying to exit a program using a function in C
我有这个 function:
void Win_Event(int player, int x, int y, int mat[][MAX]) {
int choice, i, j;
for (i = 0; i < y; i++) {
for (j = 0; j < x; j++) {
printf("\033[1;31m");
if (mat[i][j] == -1)
printf("\033[0;32m");
else if (mat[i][j] == 0)
printf("\033[0;35m");
printf("%3d |", mat[i][j]);
}
printf("\n");
}
printf("\033[1;31m");
printf("\n\033[0;36mPlayer %d Won!\nWould you like to replay? (1 -> yes, 2-> no):", player);
scanf_s("%d", &choice);
main(choice);
}
它基本上检查玩家是否获胜,然后询问他是否想重玩游戏并将该输入发送回主 function。 主要的 function 看起来像这样:
void main(int choice) {
printf("\033[0;33m");
printf("---Welcome To Pente---\n");
if (choice == 1)
SetBoardSize();
else
return 0;
}
该程序完全忽略了选择参数并立即运行 SetBoardSize function 有什么我遗漏的吗?
main()
是 C 中的一种特殊的 function,有特殊的规则。
它始终是编译器而不是程序员决定支持的 main() 的 forms。
如果您的编译器不支持void main(int choice)
(它可能不支持),那么您不能使用该形式,句号。 如果您希望偏离两个标准化的 forms int main (void)
和int main (int argc, char* argv[])
,那么您必须阅读编译器关于实现定义的 forms 的文档以查看它支持的内容(如果有的话) )。 你不能自己煮东西。
此外,在 C 中允许手动调用 main(),但这是一个非常糟糕的主意,并且不存在应该这样做的合理场景。 它会导致你递归地堆叠一堆额外的开销 memory。
首先,我建议您不要在main()
上递归,因为这不是一个好的编码习惯,而且您没有任何理由这样做(将程序的递归部分移到另一个函数中)。 其次,如果您真的想使用与现在相同的代码设计并且需要在调用 return 0 时退出,则应将其替换为:
exit(EXIT_SUCCESS);
来自stdlib.h
此外,请记住递归可能导致堆栈溢出,请注意它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.