Error to print a C name on the screen using chained list

Asked

Viewed 377 times

-1

I made this code with the purpose of asking for notes and names and then printing on the screen, but for some reason the name n is being shown the name q was typed. The code was made in C.

{
#include <stdio.h>
#include <stdlib.h>
typedef struct ElementoLista{
    char nome[81];
    char matricula[8];
    char turma;
    float p1;
    float p2;
    float p3;
    struct ElementoLista*prox;
}ElementoLista;

typedef struct Lista{
    ElementoLista*inicio;
    ElementoLista*fim;
}Lista;

Lista*CriandoLista(){
Lista*lista;
lista=(Lista*)malloc(sizeof(Lista));
lista->inicio=NULL;
lista->fim=NULL;
return lista;
}

void CopiarString(char*origem,char*Destino){
    while(*origem!='\0'){
        *Destino=*origem;
         Destino++;origem++;
    }
    *Destino='\0';
}

ElementoLista*CriandoElemento(float p1,float p2,float p3,char*nome){
    ElementoLista*novo=(ElementoLista*)malloc(sizeof(ElementoLista));
    memset(novo,0,sizeof(ElementoLista));
    CopiarString(novo->nome,nome);
    novo->p1=p1;
    novo->p2=p2;
    novo->p3=p3;
    novo->prox=NULL;
    return novo;
}

void addElemento(Lista*lista,ElementoLista*novoElemento){
    if(lista->inicio==NULL){
        lista->fim=novoElemento;
        lista->inicio=novoElemento;
    }else{
        lista->fim->prox=novoElemento;
        novoElemento->prox=NULL;
        lista->fim=novoElemento;
    }
}

void Imprimir(Lista*lista){
    ElementoLista*aux=lista->inicio;
    while(aux!=NULL){
        printf("Nome Da Pessoa \n");
        for(int i=0;(aux->nome[i])!='\0';i++){
            printf("%c",aux->nome[i]);
        }
    printf("\n");
    printf("p1= ");
    printf("%f\n",aux->p1);

    printf("p2= ");
    printf("%f\n",aux->p2);

    printf("p3= ");
    printf("%f\n",aux->p3);
    aux=aux->prox;
    }
}

int main(){
    Lista*lista=CriandoLista();
    float a=1.2,b=1.5,c=5.6;
    char nome[81];
    printf("De o nome Da Pessoa ");
    scanf("%s",&nome);
    addElemento(lista,CriandoElemento(a,b,c,nome));
    Imprimir(lista);
}
}

2 answers

2

At the top of the program, do

#include <string.h>

Then change the contents of Copiarstring to

void CopiarString(char* destino, char* origem)
{
    strcpy(destino, origem);
}

Take off the & of scanf("%s", &nome) because nome, is already a memory address.

Don’t forget to de-locate the memory with free(), before the end of the programme!

1


See if that’s what you need. You have not passed the name reference in the print function, and are not using the variable you declared to store the student name. #include #include #include

typedef struct ElementoLista{
 char nome[81];
 char matricula[8];
 char turma;
 float p1;
 float p2;
 float p3;
 struct ElementoLista*prox;
}ElementoLista;

typedef struct Lista{
 ElementoLista*inicio;
 ElementoLista*fim;
}Lista;

Lista*CriandoLista(){
 Lista*lista;
 lista=(Lista*)malloc(sizeof(Lista));
 lista->inicio=NULL;
 lista->fim=NULL;
return lista;
}

void CopiarString(char*origem,char*Destino){
 while(*origem!='\0'){
     *Destino=*origem;
      Destino++;origem++;
 }
 *Destino='\0';
}

ElementoLista*CriandoElemento(float p1,float p2,float p3,char*nome){
 ElementoLista*novo=(ElementoLista*)malloc(sizeof(ElementoLista));
 memset(novo,0,sizeof(ElementoLista));
 CopiarString(novo->nome,nome);
 novo->p1=p1;
 novo->p2=p2;
 novo->p3=p3;
 novo->prox=NULL;
 return novo;
}

void addElemento(Lista*lista,ElementoLista*novoElemento){
 if(lista->inicio==NULL){
     lista->fim=novoElemento;
     lista->inicio=novoElemento;
 }else{
     lista->fim->prox=novoElemento;
     novoElemento->prox=NULL;
     lista->fim=novoElemento;
 }
}

void Imprimir(Lista*lista, char nome){
 ElementoLista*aux=lista->inicio;
  while(aux!=NULL){

    int i=0;
    for(i;(aux->nome[i])!='\0';i++){
        printf("%c",aux->nome[i]);
    }
  printf("\n");
  printf("p1= ");
  printf("%f\n",aux->p1);

  printf("p2= ");
  printf("%f\n",aux->p2);

  printf("p3= ");
  printf("%f\n",aux->p3);
  aux=aux->prox;
 }
}

int main(){
 Lista*lista=CriandoLista();
 float a=1.2,b=1.5,c=5.6;
 char aluno[81];
 printf("De o nome Da Pessoa ");
 scanf("%s", aluno);
 printf("Nome Da Pessoa %s \n", aluno);
 addElemento(lista,CriandoElemento(a,b,c,aluno));
 Imprimir(lista, aluno);
}

Browser other questions tagged

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