0

こんにちは、リンク リストのメニューの作成に苦労しています。入力を取り込むために fscanf を使用するように言われましたが、ユーザーが常に入力するとは限らないという議論があります。具体的には、リンクされたリストに追加する番号です。私が fscanf を設定した方法は、文字、数値、そして別の文字 ([enter] キー) を読み取ることです。たとえば、ユーザーは「a 20[enter]」と入力して、番号 20 をリンク リストに追加します。ただし、ユーザーが「d[enter]」と入力すると、ユーザーが char を入力したため、num フィールドは無効になります。fgets() を使用できないことに注意してください。

別の fscanf フィールドが必要ですか? 以下は私のメニューコードです:

int main(void) {
    struct node* head = NULL;
    int num, ret;
    char select = 'n';
    char c;
    while (select != 'e') {
        printf("Enter:\na(dd) (x) = add a new node with value x to the list at the front of the list\n");
        printf("d(el) = delete the first node of list\n");
        printf("l(ength) = print the number of nodes in the list\n");
        printf("p(rint) = print the complete list\n");
        printf("z(ero) = delete the entire list\n");
        printf("e(xit) = quit the program\n");          
        ret = (fscanf(stdin, "%c %d%c", &select, &num, &c));
        if (ret == 3 && select == 'a' && c == '\n')
            Add(&head, num);
        else if (ret == 2 && select == 'd')
            Delete(&head);
        else if (ret == 2 && select == 'l')
            Length(head);
        else if (ret == 2 && select == 'p')
            PrintList(head);
        else if (ret == 2 && select == 'z' )
            ZeroList(&head);
        else
            printf("invalid\n");
    }
    return EXIT_SUCCESS;
}
4

1 に答える 1