Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [c] liste linkate stampa simboli

    buonasera a tutti scusate il disturbo ma ho un problema con questo programma

    codice:
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    typedef struct{
            char Nome[30];
            char Cognome[30];
            char Tel[30];   
            char Indirizzopaginaweb[50];
            char Indirizzoemail[50];
    } Contatto;  
    
    struct elemento{
           Contatto inf;  
           struct elemento *pun; 
    };
    
    
    void visualizzaContatto(struct elemento* p){
         if (p == NULL){
                printf (" # VISUALIZZA CONTATTO #\n");
                printf (" Nessun contatto presente\n");
                } else {
                       printf (" # VISUALIZZA CONTATTO #\n");
                       printf (" NOME > %s\n", p->inf.Nome);
                       printf (" COGNOME > %s\n", p->inf.Cognome);
                       printf (" TELEFONO > %s\n", p->inf.Tel);
                       printf (" SITOWEB > %s\n", p->inf.Indirizzopaginaweb);
                       printf (" EMAIL > %s\n", p->inf.Indirizzoemail);
                       }
                       while (p != NULL){
                                 printf (" # VISUALIZZA CONTATTO #\n");
                                 printf (" NOME > %s\n", p->inf.Nome);
                                 printf (" COGNOME > %s\n", p->inf.Cognome);
                                 printf (" TELEFONO > %s\n", p->inf.Tel);
                                 printf (" SITOWEB > %s\n", p->inf.Indirizzopaginaweb);
                                 printf (" EMAIL > %s\n", p->inf.Indirizzoemail);
                                 p = p->pun;
                                 system("PAUSE");
                                 }
                                 
                                 }  
    
    struct elemento *aggiungiContatto(struct elemento *p){
           printf (" # AGGIUNGI CONTATTO   #\n");
           char nome[50];
           char cognome[50];
           char telefono[30];
           char email[100];
           char sitoweb[200];
           Contatto daInserire;
           struct elemento *punt;
    
           punt = (struct elemento *)malloc(sizeof(struct elemento));
           p = (struct elemento *)malloc(sizeof(struct elemento));
    
           printf (" NOME > ");
           scanf ("%s", nome);
           strcpy(daInserire.Nome, nome);
           printf (" COGNOME > ");
           scanf ("%s", cognome);
           strcpy(daInserire.Cognome, cognome);
           printf (" TELEFONO > ");
           scanf ("%s", telefono);
           strcpy(daInserire.Tel, telefono);
           printf (" SITOWEB > ");
           scanf ("%s", sitoweb);
           strcpy(daInserire.Indirizzopaginaweb, sitoweb);
           printf (" EMAIL > ");
           scanf ("%s", email);
           strcpy(daInserire.Indirizzoemail, email);
    
           if(p != NULL){
                punt->inf = daInserire;
                punt->pun = p;     
                } else {
                       p->inf = daInserire;
                       p->pun = NULL;
                       punt = p;
                       }    
                       return(punt);    
    }
    
    
    
    struct elemento *rimuoviContatto(struct elemento *p){
           struct elemento *aus; 
           struct elemento *twin = p;
           int subscelta;
           int i=1;
           int n=1;
           printf (" # RIMUOVI CONTATTO    #\n");
           while (p != NULL){
                 printf ("%i) \t %s \t %s\n", i, p->inf.Nome, p->inf.Cognome);
                 p = p->pun; 
                 i++;    
                 }    
                 p = twin; 
                 printf("\n\n Inserisci il numero del contatto che vuoi rimuovere: ");
                 scanf("%i", &subscelta);
                 if (subscelta < i){
                               if(p == NULL)
                               return 0;
    
                               if(p->pun != NULL){
                                         aus=p;
                                         n++;
                                         while(n != i){
                                                 if(subscelta == n){
                                                              aus->pun=aus->pun->pun;
                                                              } else {
                                                                     aus=aus->pun; 
                                                                     }
                                                                     n++;    
                                                                     }}
    
    
                                                                     if(subscelta == 1){
                                                                                       p=p->pun;    
                                                                                       }} 
                                                                                       twin = p;
                                                                                       return twin;   
    }
    
    bool cerca(struct elemento* p,char *c) {
         struct elemento *punt=p;
         bool trovato=false;
         while((punt!=NULL) && (!trovato)) {
                             if(strcmp(c,punt->inf.Cognome)==0)
                             trovato=true;
                             else
                             punt=punt->pun;
                             }
                             return(trovato);
    }
    
    void *leggiValore(struct elemento* p,char *c){
         struct elemento *punt=p;
         bool trovato=false;
         while((punt!=NULL) && (!trovato)) {
                            if(strcmp(c,punt->inf.Cognome)==0)
                            trovato=true;
                            else
                            punt=punt->pun;
                            }
                            printf("il valore relativo al contenuto inserito e':\n");
                            printf (" NOME > %s\n", punt->inf.Nome);
                            printf (" COGNOME > %s\n", punt->inf.Cognome);
                            printf (" TELEFONO > %s\n", punt->inf.Tel);
                            printf (" SITOWEB > %s\n", punt->inf.Indirizzopaginaweb);
                            printf (" EMAIL > %s\n", punt->inf.Indirizzoemail);
                            system("PAUSE");
    }
    
    void leggi(struct elemento* p,char *c){
         if (cerca(p,c)==true)
         leggiValore(p,c);
         else{
              printf("\n\nERRORE: il valore collegato al contenuto inserito NON ESISTE\n");
              system("PAUSE");
    }}
    
    void Cancella(struct elemento* p){
         struct elemento *aux;
         while (NULL != p){
               aux = p;
               p = p->pun;
               free(aux); 
    }}
    
    int main(){
        int scelta;
        struct elemento *lista = NULL;
        char c[50];
    
     do{
             printf (" 1) VISUALIZZA CONTATTO\n\n");
             printf (" 2) AGGIUNGI CONTATTO\n\n");
             printf (" 3) RIMUOVI CONTATTO\n\n");
             printf (" 4) CERCA CONTATTO\n\n");
             printf (" 5) ELIMINA TUTTA LA RUBRICA\n\n");
             printf (" 6) ESCI\n\n\n\n");
             printf (" la tua scelta > ");
             scanf("%d",&scelta);
             system("CLS");
             switch(scelta){
                            case 1:{
                                 visualizzaContatto(lista);  
                                 break;  
                                 }
                            case 2:{
                                 lista = aggiungiContatto(lista);
                                 break; 
                                 }
                            case 3:{
                                 lista = rimuoviContatto(lista);
                                 break;
                                 }
                            case 4:{
                                 printf("Inserisci il cognome che vuoi leggere: \n");
                                 scanf("%s", c);
                                 leggi(lista,c);
                                 break;
                                 }
                            case 5:{
                                 Cancella(lista);
                                 lista=NULL;
                                 break;
                                 }
                                 system("PAUSE");
                                 system("CLS");
                                 }}while(scelta!=6);
                                 return 0;
    }

    compilate il programma e se potete dammi qualche consiglio ve ne sarei grato
    grazie in anticipo

  2. #2
    in realtà dovresti tu specificarci il problema, dove insorge, quale pensi possa essere la causa e in seguito valutiamo in che modo aiutarti
    E magari una piccola spiegazione su cosa faccia, visto che le uniche informazioni che hai dato sono un titolo di dubbio significato e la totale assenza di commenti nel codice

  3. #3
    si hai ragione cmq questo è un programma di una rubrica telefonica con le liste linkate che ha una funzione che aggiunge un contatto, stampa i contatti presenti, cerca un elemento della lista, elimina un elemento della lista, ed infine elimina tutta la rubrica

    il mio problema è questo quando eseguo il programma aggiungo un contatto, dopo averlo fatto voglio visualizzare questo contatto, ma quando esegue la funzione stampa, mi stampa il mio contatto piu un contatto con dei simboli che non ho messo.

    questo problema lo riscontrato pure nelle altre funzione.

    secondo me il problema dovrebbe essere un puntatore ma non so in cosa consiste questo problema

    è sufficiente oppure metto pure i commenti nel programma?

  4. #4
    codice:
    else {
                       printf (" # VISUALIZZA CONTATTO #\n");
                       printf (" NOME > %s\n", p->inf.Nome);
                       printf (" COGNOME > %s\n", p->inf.Cognome);
                       printf (" TELEFONO > %s\n", p->inf.Tel);
                       printf (" SITOWEB > %s\n", p->inf.Indirizzopaginaweb);
                       printf (" EMAIL > %s\n", p->inf.Indirizzoemail);
                       }
                       while (p != NULL){
                                 printf (" # VISUALIZZA CONTATTO #\n");
                                 printf (" NOME > %s\n", p->inf.Nome);
                                 printf (" COGNOME > %s\n", p->inf.Cognome);
                                 printf (" TELEFONO > %s\n", p->inf.Tel);
                                 printf (" SITOWEB > %s\n", p->inf.Indirizzopaginaweb);
                                 printf (" EMAIL > %s\n", p->inf.Indirizzoemail);
                                 p = p->pun;
                                 system("PAUSE");
                                 }
    Perchè questa stampa "doppia" ?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  5. #5
    perchè con la prima stampa il primo elemento e con la seconda stampa tutti gli altri elementi

    è un errore?

  6. #6
    Originariamente inviato da nicone 91
    perchè con la prima stampa il primo elemento e con la seconda stampa tutti gli altri elementi

    è un errore?
    Bè, a meno che non mi sfugga qualcosa, la funzione per stampare non ha molto senso secondo me... Tu dici:

    1) se p == NULL (lista vuota) stampa "Nessun contatto presente";
    2) altrimenti stampa il primo elemento (ma NON sposta il puntatore nella lista, cioè punta ancora al primo elemento!);
    3) in ogni caso (il ciclo è fuori dall'if e dall'else) stampi tutti gli elementi della lista;

    Quindi a occhio il primo elemento dovrebbe venire stampato due volte!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  7. #7
    allora cmq si il primo elemento lo stampava 2 volte
    cmq ho provato a togliere la prima stampa e lascire solo la seconda è l'unica cosa che mi stampa sono simboli nemmeno piu il primo elemento che metto quindi il problema o sta nella funzione stampa o in quella aggiungi contatto

  8. #8
    Allora analizziamo la funzione per aggiungere un contatto:

    codice:
    struct elemento *aggiungiContatto(struct elemento *p){
           printf (" # AGGIUNGI CONTATTO   #\n");
           char nome[50];
           char cognome[50];
           char telefono[30];
           char email[100];
           char sitoweb[200];
           Contatto daInserire;
           struct elemento *punt;
    
           punt = (struct elemento *)malloc(sizeof(struct elemento));
           p = (struct elemento *)malloc(sizeof(struct elemento)); /* perchè fai una malloc anche per p?? devi farla solo per il nuovo nodo, ossia punt! */ 
    
           printf (" NOME > ");
           scanf ("%s", nome);
           strcpy(daInserire.Nome, nome);
           printf (" COGNOME > ");
           scanf ("%s", cognome);
           strcpy(daInserire.Cognome, cognome);
           printf (" TELEFONO > ");
           scanf ("%s", telefono);
           strcpy(daInserire.Tel, telefono);
           printf (" SITOWEB > ");
           scanf ("%s", sitoweb);
           strcpy(daInserire.Indirizzopaginaweb, sitoweb);
           printf (" EMAIL > ");
           scanf ("%s", email);
           strcpy(daInserire.Indirizzoemail, email);
    
           punt->inf = daInserire;
           punt->pun = p;       /* semplicemente concateni p a punt, sia che p sia NULL o che punti a una lista di elementi, non importa fare la distinzione di prima! */
           return(punt);    
    
    }

    Sono un paio di cose che mi vengono in mente, fai qualche prova e dimmi come va!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  9. #9
    allora abbiamo fatto un passo avanti pero questa volta mi stampa le lettere non piu i simboli e non mi crea piu un contatto con i simboli

  10. #10
    Originariamente inviato da nicone 91
    allora abbiamo fatto un passo avanti pero questa volta mi stampa le lettere non piu i simboli e non mi crea piu un contatto con i simboli
    Non ho capito bene, in che senso ti stampa le lettere?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.