You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何忽略admin节点,仅在输入非admin时创建队列节点

需求说明
  • 仅当输入的名称不等于admin时,才创建节点并加入队列
  • 若输入admin,则进入admin菜单修改全局变量,退出菜单后重新获取非admin名称以创建新节点
问题与解决过程

我首次编写的incnode函数存在逻辑问题,一开始尝试用标记区分是否创建节点,后来明确需求为在输入名称阶段可访问admin菜单,最终通过循环判断输入的方式修正代码,实现了预期功能。

初始代码

int incnode(TNOD *p) {
    char text[30];
    char currency[15];
    float amount;
    int adminExit=0;
    do{
        printf("Enter your name: \n");
        fflush(stdin);

        // 使用fgets安全读取用户输入
        fgets(text, sizeof(text), stdin);

        // 移除末尾的换行符
        text[strcspn(text, "\n")] = '\0';


        if (strcmp(text, "admin") == 0) {
           adminExit=admin_menu();

        }else{
            p->string = (char *)malloc(strlen(text) + 1); // +1 用于存储空终止符
        strcpy(p->string, text);

        printf("Enter the currency to buy: ");
        scanf("%s", currency);

        printf("Enter the amount to buy: ");
        scanf("%f", &amount);

        p->amount = amount;
        p->currency = (char *)malloc(strlen(currency) + 1);
        strcpy(p->currency, currency);
        }
        if (strcmp(currency, "dollar") == 0) {
        buy_DOLLAR(amount);
    } else if (strcmp(currency, "lbp") == 0) {
         buy_LBP(amount);
    } else if (strcmp(currency, "pound") == 0) {
        buy_POUND(amount);
    } else if (strcmp(currency, "euro") == 0) {
        buy_EURO(amount);
    }
        return 1;}
        while(!adminExit);

return 0;

}

修正后代码

int incnode(TNOD *p) {
    char text[30];
    char currency[15];
    float amount;
    int adminExit=0;

        printf("Enter your name: \n");
        fflush(stdin);

        // 使用fgets安全读取用户输入
        fgets(text, sizeof(text), stdin);

        // 移除末尾的换行符
        text[strcspn(text, "\n")] = '\0';


        while (strcmp(text, "admin") == 0) {
        admin_menu();
        printf("Enter a new name: ");
        fflush(stdin);
        fgets(text, sizeof(text), stdin);
        text[strcspn(text, "\n")] = '\0';
        }


        p->string = (char *)malloc(strlen(text) + 1); // +1 用于存储空终止符
        strcpy(p->string, text);

        printf("Enter the currency to buy: ");
        scanf("%s", currency);

        printf("Enter the amount to buy: ");
        scanf("%f", &amount);

        p->amount = amount;
        p->currency = (char *)malloc(strlen(currency) + 1);
        strcpy(p->currency, currency);

        if (strcmp(currency, "dollar") == 0) {
        buy_DOLLAR(amount);
    } else if (strcmp(currency, "lbp") == 0) {
         buy_LBP(amount);
    } else if (strcmp(currency, "pound") == 0) {
        buy_POUND(amount);
    } else if (strcmp(currency, "euro") == 0) {
        buy_EURO(amount);
    }
        return 1;}

内容的提问来源于stack exchange,提问作者ALI-LKS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:43:15