这两个函数大约有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);
}
答案 0 :(得分:2)
函数1返回相当于布尔值(1或0 - 分别为C的真或假),具体取决于函数1是成功还是失败。在决定运行功能2(或不运行)之前检查该值。
执行此操作的一种方法是在头文件中定义boolean_t
便捷类型和kTrue
和kFalse
值。这些是引擎盖下的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()
以便它返回kTrue
或kFalse
,具体取决于其工作是成功还是失败:
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");
}