我刚刚开始从 Head First C 学习 C,但我很难理解如何将我的代码重构为多个函数,更具体地说,我不知道如何让函数工作,并且很困惑如何接受用户输入。
如何将如下所示的函数合并到主函数中?我可以使用哪些其他函数示例来重构?非常感谢!
void get_card_name(char *prompt, char *card_name)
主要功能
int main()
{
char card_name[3];
int count = 0;
while ( card_name[0] != 'X' ) {
puts("Enter the card_name: ");
scanf("%2s", card_name);
int val = 0;
switch(card_name[0]) {
case 'K':
case 'Q':
case 'J':
val = 10;
break;
case 'A':
val = 11;
break;
case 'X':
continue;
default:
val = atoi(card_name);
if ((val < 1) || (val > 10)) {
puts("I dont understand that value!");
continue;
}
}
if ((val > 2) && (val < 7)) {
count++;
} else if (val == 10) {
count--;
}
printf("Current count: %i\n", count);
}
return 0;
}
最佳答案
涉及重构时的通用答案是“如果它看起来很复杂或难以阅读,请尝试将其分解为更容易阅读(和理解)的更小的部分。”。
在你的情况下,你有这个:
int main() {
/* Initial state needed later on */
/* Do some complicated stuff */
}
要重构它,您需要找出初始状态的哪些部分需要与您要移至其自己的函数中的内容保持接近。在您的示例中,card_name
和 count
都在复杂位内部使用,而不是在其他地方使用。因此,您可以而且应该将这些内容保留在复杂的部分附近:
void do_card_stuff() {
char card_name[3];
int count = 0;
/* Do some complicated stuff */
}
int main() {
do_card_stuff();
}
而且,你瞧,您已经重构了您的代码。如果您仍然认为卡片内容看起来很复杂,请尝试将其分解为更多部分:
int get_card_value(char card) {
/* Do some complicated stuff */
return value;
}
int do_card_stuff() {
char card_name[3];
int count = 0;
int value;
/* Loop */
/* Get card value from user */
value = get_card_value(card_name[0]);
}
int main() {
do_card_stuff();
}
只要坚持下去,直到把它分成更小的部分是愚蠢的,你就完成了。另外,请记住,您分解的代码应尽可能通用,因为这将使您稍后可以重复使用此代码(可能在其他项目中)。
关于c - 将简单的算牌功能重构为多种功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12409506/