How to show/display a list of strings in Chained List?

Asked

Viewed 528 times

1

Guys, I just started to learn Chained List in C language. Why didn’t my code display full string on the screen? It is displaying only integers or 1 character. The problem is in the display part (the error must be from line 63 of the program below) which shows no strings. This is the model the teacher is teaching. If someone can give a check and help me find the formula to print the student list (strings) correctly thank you very much for the help.. tmj S2

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


typedef struct Alunos {
    char informacao;
    struct Alunos *proximo;
}Aluno;

int main ()
{
    Aluno* Lista;
    int opcao=0;
    void IniciarLista(Aluno **pRecebido);
    void InserirElemento(Aluno **pRecebido);
    void BuscarElemento(Aluno **pRecebido);
    void RemoverElemento(Aluno **pRecebido);
    int leValor(int *valorRecebido);
    Lista = (Aluno*)malloc(sizeof(Aluno));
    IniciarLista(&Lista);

    for(;;) {
        printf("\nDigite 1 para inserir aluno: ");
        printf("\nDigite 2 para consultar alunos inseridos: ");
        printf("\nDigite 3 para remover aluno: ");
        printf("\nDigite 4 para Sair!\n\n");
        scanf("%d", &opcao);
        opcao = leValor(&opcao);
        switch(opcao) {
            case 1:
                InserirElemento(&Lista);
                break;
            case 2:
                BuscarElemento(&Lista);
                break;
            case 3:
                RemoverElemento(&Lista);
                break;
            case 4:
                exit(0);
        }
    }
    return 0;
}

void IniciarLista(Aluno **pRecebido) {
    (*pRecebido)->proximo=NULL;
}

void InserirElemento(Aluno **pRecebido) {
    Aluno *temporario;
    char nome1[50];
    printf("\nNome do aluno: ");
    scanf("%s", &nome1);
    temporario=(Aluno*)malloc(sizeof(Aluno));
    temporario->informacao = nome1[50];
    temporario->proximo=(*pRecebido)->proximo;
    (*pRecebido)->proximo=temporario;
}

void BuscarElemento (Aluno **pRecebido) {
    Aluno *temporario;
    if((*pRecebido)->proximo==NULL) {
        printf("\nLista vazia!\n");
    }else if (temporario!=NULL){
        temporario=(Aluno*)malloc(sizeof(Aluno));
        temporario=(*pRecebido)->proximo;
         {
            printf("\nAluno: %s\n", temporario->informacao);
            temporario=temporario->proximo;
        }
    }
}

void RemoverElemento (Aluno **pRecebido) {
    Aluno *temporario;
    if((*pRecebido)->proximo==NULL) {
        printf("\nLista Vazia!\n");
    }else {
        temporario=(*pRecebido)->proximo;
        (*pRecebido)->proximo=temporario->proximo;
        free(temporario);
    }
}

int leValor(int *valorRecebido) {
    while((*valorRecebido>4) || (*valorRecebido<1)) {
        printf("\nOpcao invalida. Tente novamente:\n");
        scanf("%d", &(*valorRecebido));
    }
    return(*valorRecebido);
}

1 answer

1

The result is printing 1 character because its structure is char informacao meaning only 1 character and not char* informacao or char informacao[100] which means "string"

You are also allocating a new student to the variable temporario causing the printed result to be wrong.

Usually when we create a chained list we call the first element head and not list.

It is not necessary to use double pointers to pass the Lista (head) for the duties.

void IniciarLista(Aluno *pRecebido);
void InserirElemento(Aluno *pRecebido);
void BuscarElemento(Aluno *pRecebido);
void RemoverElemento(Aluno *pRecebido);
...
case 1:
    InserirElemento(Lista);
    break;
case 2:
    BuscarElemento(Lista);
    break;
case 3:
    RemoverElemento(Lista);
    break;

No need to cast malloc.

Lista = malloc(sizeof(Aluno));

Its function BuscarElemento doesn’t seem to be looking for something your intention was to print out the entire list? If you are going to print note the change I made.

void BuscarElemento (Aluno *head) {
    if(head==NULL) {
        printf("\nLista vazia!\n");
    }else {
        int i = 0;
        Aluno *temporario = head; //Não aloca um novo Aluno
        while (temporario != NULL)
        {
            printf("Aluno[%d]: %c\n", i, temporario->informacao); //O tipo de dado é char!
            temporario = temporario->proximo;
            ++i;
        }
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.