gpt4 book ai didi

创建具有挑战性的终端菜单

转载 作者:行者123 更新时间:2023-11-30 14:29:48 24 4
gpt4 key购买 nike

我不会做的是创建一个终端菜单,它接受各种类型的参数并将其放置在数组参数中。下面是代码:这是我遇到的一些问题,但找不到好的解决方案。

如果我只输入“列表”,我将得到“不是有效的命令,我必须输入“列表”(列表和空格)。新的菜单选项应该是这样的:新的“我的名字是你好”。 param[0] = new 和 param[1] = 我的名字是 hello ,(这样我就可以创建一 strip 有空格的消息)。

我怎样才能做到这一点?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

int menu()
{
printf(">");

char line[LINE_MAX];
int i = 0;
char *param[4];

while(fgets(line, LINE_MAX, stdin) != NULL) {
param[i++] = strtok(line, " \n");

if(param[0] != NULL) {
char *argument;

while((argument = strtok(NULL, "\n")) != NULL) {
param[i++] = argument;
}
}

if(strcmp(param[0], "new") == 0) {
//new(param[1]);
menu();

} else if(strcmp(param[0], "list") == 0) {
//list();
menu();

} else {
printf("Not a valid command.\n\n");
menu();
}
}

return 0;
}

最佳答案

您正在对“”进行分隔。

fgets 读取 ENTER。

因此,当您输入“listENTER”并在空格处标记时,您会得到一个标记,即“listENTER”。后来你与“list”进行比较,当然,它不匹配。

尝试

strtok(line, " \n"); /* maybe include tabs too? */
PS。为什么要递归调用 menu ?您的函数中已经有一个 while ...

关于创建具有挑战性的终端菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214142/

24 4 0