0

2種類のデータをリンクリストに入れようとしています。例えば:

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);`

エラーが発生します:

行でscanfinvalid operands to binary & (have ‘char *’ and ‘char *’)

関数の終わりにaddnodeexpected 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

ここで実際に「検索」を行うことはありませんが、各コマンドの文字列の比較のみを行います。まず、ファイルから読み込んだ「行」を含むリストを作成する必要があります。ファイルを 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 に答える