0

我正在尝试将两种类型的数据放入链接列表中。例如:

rotate 0
move 100
rotate 270
move 100
pattern #
rotate 0
draw 50
rotate -30
draw 100
rotate -90

它首先是一个字符串rotate,然后是一个整数 0

我这样声明:

typedef struct NODE
{
    char command[6];
    int number;
    struct NODE *next;
} NODE;

初始化字符串和变量:

char command1[6];
int num = 0;

然后输入到列表中,有一个功能addnode

void addnode(NODE *llist, char command1[6], int num)
{
    while (llist->next != NULL)
        llist = llist->next;

    llist->next = (NODE *)malloc(sizeof( NODE));
    llist->next->command[6] = command1[6];
    llist->next->number = num;
    llist->next->next = NULL;
}

并输入:

scanf("%s, %d"&command1, &num);
append_node(llist,command1, num);`

我收到错误:

scanf在线:invalid operands to binary & (have ‘char *’ and ‘char *’)

addnode函数结束时:expected declaration or statement at end of input

4

3 回答 3

2

scanf 应该是

scanf("%s %d", command1, &num);

数组的名称command1,当不使用下标运算符时给出第一个元素的地址。

你的 addNode 应该是这样的:

void addnode(NODE *root, char command1[6], int num)
{
    NODE *llist = root;
    do
    {
        if (llist == NULL)
        {
            llist = (NODE *)malloc(sizeof(NODE));
            ...error check allocation...
            llist->command = command1;
            llist->number = num;
            llist->next = NULL;
            break;
        }
        llist = llist->next;
    }
    while (1);
}
于 2012-10-02T04:29:06.813 回答
1

您实际上不会在这里进行任何“搜索”,而只是对每个命令进行字符串比较。首先,您只需要创建一个包含从文件中读取的“行”的列表。当您逐行遍历文件时,在列表上创建一个新节点。

然后,您可以通过使用节点并进行字符串比较来处理列表,以查看您需要调用哪个命令函数。

听起来您的老师要求您使用链接列表,但这不是必需的。您可以执行函数调用,而无需将行实际存储在容器中。

于 2012-10-02T03:03:43.697 回答
0

一些观察:

1.要初始化一个 char 数组,使用memcpy(array, 0, sizeof(array)).

2.要将一个字符串复制到另一个字符串,请使用strcpy/strncpy. =运算符不会在 c 中工作。

3.你的scanf语句是错误的,应该是scanf("%s, %d",command1, &num);

于 2012-10-02T04:34:48.927 回答