繁体   English   中英

尝试在 C 中使用 function 退出程序的问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM