如何忽略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
相关产品推荐
相关产品推荐

