Программирование на C: связанные списки - PullRequest
3 голосов
/ 17 июня 2011

Я пишу программу, используя связанный список (такой кошмар).

В любом случае, цель программы состоит в том, чтобы ввести 8 символов и заставить программу печатать символы обратно к вам, а также печатать символы обратно в обратном порядке, используя, конечно, связанные списки.

Я понял это до сих пор.В этом много неправильного (я думаю).

Проблемы

  • При запросе символов у пользователя он должен автоматически читать количество символов без необходимостиспросите, сколько символов

  • Кроме того, когда он компилируется, он выводит на экран бред, например, я просто запустил его и напечатал

    ¿r
      (àõ($ê¿¿  
    a¿r
    (àõ($ê¿¿  
    
    ¿r
      (àõ($ê¿¿  
    b¿r
       (àõ($ê¿¿  
    

Здесь нужна большая помощь.Было бы очень признательно!

Код курса

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

#define strsize 30

typedef struct member
{
    int number;
    char fname[strsize];
    struct member *next;
}
RECORD;

RECORD* insert (RECORD *it);
RECORD* print(RECORD *it, int j);

int main (void)
{
    int i, result;
    RECORD *head, *p;
    head=NULL;
    printf("Enter the number of characters: ");
    scanf("%d", &result);

    for (i=1; i<=result; i++)
        head=insert (head);
    print (head, result);

    return 0;
}

RECORD* insert (RECORD *it)
{
    RECORD *cur, *q;
    int num;
    char junk;
    char first[strsize];
    printf("Enter a character:");
    scanf("%c", &first);

    cur=(RECORD *) malloc(sizeof(RECORD));

    strcpy(cur->fname, first);
    cur->next=NULL;

    if (it==NULL)
        it=cur;
    else
    {
        q=it;
        while (q->next!=NULL)
            q=q->next;
        q->next=cur;
    }
    return (it);
}

RECORD* print(RECORD *it, int j)
{
    RECORD *cur;
    cur=it;
    int i;  
    for(i=1;i<=j;i++)
    {
        printf("%s  \n", cur->fname);
        cur=cur->next;
    }
    return;
}

1 Ответ

3 голосов
/ 17 июня 2011

У вас есть:

во вставке:

char first[strsize];

scanf("%c", &first);  /* note the %c */

strcpy(cur->fname, first);

при печати

printf("%s  \n", cur->fname);

Вы должны иметь %s вместо %c и, следовательно, изменить &format до format в списке аргументов, поскольку format сам представляет адрес места, в котором должна храниться строка.

Таким образом, вызов scanf должен быть таким, как показано ниже

scanf("%s", first);

Другое дело.Если вы указали тип возврата в функции print, то вы должны что-то вернуть или сделать так, чтобы ничего не возвращалось (объявите тип возврата как void).В этом случае это не создаст никаких проблем.

Прочитайте предупреждающие сообщения, которые выдает вам компилятор, и вы увидите, что компилятор действительно ответил на ваши вопросы.

Вам нужно сделать некоторыеРедизайн я думаю.Например, чтобы просмотреть связанный список, вам не нужно противопоставлять 'j'.вы можете обнаружить завершение списка, проверив, является ли ссылка next NULL или нет.

Ваш вопрос заключался в том, чтобы печатать символы или строки в обратном порядке, поэтому вам нужно написать какую-то другую функцию печати, отличную от вашей.написал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...