首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将简单的点牌功能重构为多个功能?

将简单的点牌功能重构为多个功能?
EN

Stack Overflow用户
提问于 2012-09-13 23:14:50
回答 1查看 168关注 0票数 0

我刚刚开始从Head First C学习C,但我很难理解如何将我的代码重构为多个函数,更具体地说,我不知道如何让函数工作,并且对如何接受用户输入感到困惑。

如何将下面这样的函数合并到main函数中?我可以用来重构的其他一些函数示例是什么?非常感谢!

代码语言:javascript
运行
复制
void get_card_name(char *prompt, char *card_name)

Main函数

代码语言:javascript
运行
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-14 18:16:33

当涉及到重构时,一般的答案是“如果它看起来很复杂或难以阅读,试着把它分解成更容易阅读(和理解)的更小的部分。”

在您的示例中,您具有以下内容:

代码语言:javascript
运行
复制
int main() {
  /* Initial state needed later on */

  /* Do some complicated stuff */
}

要重构它,您需要找出初始状态的哪些部分需要与您要移出到其自身函数中的任何内容保持密切关系。在您的示例中,card_namecount都在复杂的bit中使用,而不在其他地方使用。所以你可以,也应该,保持这些复杂的部分:

代码语言:javascript
运行
复制
void do_card_stuff() {
  char card_name[3];
  int count = 0;

  /* Do some complicated stuff */
}

int main() {
  do_card_stuff();
}

你看,你已经重构了你的代码。如果你仍然认为卡片的东西看起来很复杂,试着把它分成更多的部分:

代码语言:javascript
运行
复制
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();
}

只要坚持下去,直到把它分成小块是愚蠢的,你就完成了。此外,请记住,您生成的代码应该尽可能通用,因为这将允许您稍后重用这些代码(可能在其他项目中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12409506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档