Error to print on screen a name in C, using threaded list

-1

I made this code with the purpose of asking for notes and names and then printing on the screen, so for some reason the name n is being shown the name that was entered. 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!='
{
#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!='%pre%'){
        *Destino=*origem;
         Destino++;origem++;
    }
    *Destino='%pre%';
}

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])!='%pre%';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);
}
}
'){ *Destino=*origem; Destino++;origem++; } *Destino='%pre%'; } 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])!='%pre%';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); } }
    
asked by anonymous 23.05.2018 / 21:55

2 answers

1

See if that's what you need. You have not passed the reference name in the print function, and you are not using the variable that you declared to store the student's 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!='
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!='%pre%'){
     *Destino=*origem;
      Destino++;origem++;
 }
 *Destino='%pre%';
}

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])!='%pre%';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);
}
'){ *Destino=*origem; Destino++;origem++; } *Destino='%pre%'; } 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])!='%pre%';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); }
    
24.05.2018 / 16:45
2

At the top of the program, do

#include <string.h>

Then change the contents of CopyString to

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

Take out & of scanf("%s", &nome) because nome , by itself, is already a memory address.

Do not forget to deallocate memory with free() , before finishing the program!

    
23.05.2018 / 22:57