我刚刚开始从Head First C学习C,但我很难理解如何将我的代码重构为多个函数,更具体地说,我不知道如何让函数工作,并且对如何接受用户输入感到困惑。
如何将下面这样的函数合并到main函数中?我可以用来重构的其他一些函数示例是什么?非常感谢!
void get_card_name(char *prompt, char *card_name)Main函数
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;
}发布于 2012-09-14 18:16:33
当涉及到重构时,一般的答案是“如果它看起来很复杂或难以阅读,试着把它分解成更容易阅读(和理解)的更小的部分。”
在您的示例中,您具有以下内容:
int main() {
/* Initial state needed later on */
/* Do some complicated stuff */
}要重构它,您需要找出初始状态的哪些部分需要与您要移出到其自身函数中的任何内容保持密切关系。在您的示例中,card_name和count都在复杂的bit中使用,而不在其他地方使用。所以你可以,也应该,保持这些复杂的部分:
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();
}只要坚持下去,直到把它分成小块是愚蠢的,你就完成了。此外,请记住,您生成的代码应该尽可能通用,因为这将允许您稍后重用这些代码(可能在其他项目中)。
https://stackoverflow.com/questions/12409506
复制相似问题