如果第一个函数在C中执行,如何取消第二个函数?

时间:2017-02-03 23:38:31

标签: c function loops

这两个函数大约有200行,因为它有一堆case语句(并且它们确实可以正常工作)所以不要显示我只是解释它的作用。我目前正在创建一个类似于跳棋的游戏。

功能1:检查用户是否输入了有效的移动。如果他们没有那么它将打印出#34;无效的移动"。

功能2:更新已在板上移动的部件并显示新更新的板。

在main函数中我做了一个while循环,所以如果用户输入了一个无效的移动,它们将再次被提示。它确实如此,但董事会仍将更新。例如:如果他们选择将第1件移动到第3件占据的位置,则电路板将更新:第1件的位置现在为空,即使它打印出来"无效移动"。如果功能1打印了某些内容,我不知道如何停止功能2。 这是我在main函数中添加的内容。

    char pieceToMove, emptySpot;
    int moveNumber = 0;
    int piecesOnBoard = 15;

    while (piecesOnBoard >= 1, ++moveNumber) {
        //prompting user input
        printf("%d. Enter your move:", moveNumber);
        scanf(" %c  %c", &pieceToMove, &emptySpot);

        checkMoves(pieceToMove, emptySpot, all, the, pieces, ect);
        updateBoard(all, the, pieces);
     }

1 个答案:

答案 0 :(得分:2)

函数1返回相当于布尔值(1或0 - 分别为C的真或假),具体取决于函数1是成功还是失败。在决定运行功能2(或不运行)之前检查该值。

执行此操作的一种方法是在头文件中定义boolean_t便捷类型和kTruekFalse值。这些是引擎盖下的int值,但这使代码更易于阅读:

typedef enum boolean { 
    kFalse = 0, 
    kTrue 
} boolean_t;

在您的标头文件中,声明您的第一个函数function_one()将返回boolean_t

boolean_t function_one(...); /* "..." are the arguments this function takes */

在您的实现文件中,您编写function_one()以便它返回kTruekFalse,具体取决于其工作是成功还是失败:

boolean_t function_one(...) {
    do_stuff();
    if (some_step_fails) {
        return kFalse;
    }
    return kTrue;
}

再次在实现文件中,将调用写入function_two(),以便仅当function_one()的返回值为kTrue时才会运行:

if (function_one(...) == kTrue) {
    function_two();
}
else {
    fprintf(stderr, "Error: Something went wrong...\n");
}