Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    6

    C++ AIUTOOO non capisco il problema del mio codice

    Prima di tutto vorrei ringraziare tutti quelli che hanno accolto la mia richiesta di aiuto e vorrei continuare dicendo che sono alle prime armi, quindi vi prego abbiate pazienza.

    Il mio problema è relativo ad un progetto d'esame che si occupa di creare un programma che gestisca una rubrica telefonica utilizzando le liste concatenate e l'allocazione dinamica della memoria. Questo programma deve quindi avere una lista di contatti ognuno dei quali deve avere un nome, un cognome, un numero di telefono e di casa, un indirizzo di posta elettronica e di sito web. Inoltre sulla lista deve essere possibile eseguire operazioni di immissione ricerca cancellazione e visualizzazione dei contatti.

    Io ho strutturato tutto il codice ma quando eseguo il programma, questo va in errore e il nome di questo errore è APPCRASH.
    Potreste darmi una mano???
    Ci sbatto la testa da 3 giorni ormai voi siete la mia ultima speranza....vi prego AIUTOOO.....

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    6
    nella speranza di un aiuto adesso inserisco il codice e i dettagli dell'errore.....
    Vi prego AIUTATEMII...

    Codice PHP:
    #include <stdio.h>
    #include <iostream>
    #include <stdlib.h>
    #define DIM_numero 10
    #define MAX_carattere 100

    typedef struct {                    // DEFINIAMO IL TIPO CONTATTO.
            
    char nome [MAX_carattere];
            
    char cognome [MAX_carattere];
            
    char numero [DIM_numero];
            
    char numero_casa [DIM_numero];
            
    char email [MAX_carattere];
            
    char indirizzo_web [MAX_carattere];
            } 
    tipi_contatti;
            
    struct Contatto_in_rubrica;

    typedef Contatto_in_rubrica *PuntContatto_in_rubrica;

    typedef struct Contatto_in_rubrica {
            
    tipi_contatti CONTATTO;
            
    Contatto_in_rubrica contattoSuccessivo;
            } 
    Contatto_in_rubrica;
            
    PuntContatto_in_rubrica inserisci_in_ordine(PuntContatto_in_rubrica Ltipi_contatti *CONTATTO) { // Funzione per l'inserimento di un contatto in rubrica.
                  
                  
    PuntContatto_in_rubrica succprecnew_node;
                  
    new_node=(PuntContatto_in_rubrica)malloc(sizeof (struct Contatto_in_rubrica));
                  
    prec=NULL;
                  
    succ=L;
                  
                  
    printf("Inserire il NOME del contatto: \n");
                  
    scanf("%f", &new_node->CONTATTO.nome);
                  
    printf("Inserire il COGNOME del contatto: \n");
                  
    scanf("%f", &new_node->CONTATTO.cognome);
                  
    printf("Inserire il NUMERO del contatto: \n");
                  
    scanf("%f", &new_node->CONTATTO.numero);
                  
    printf("Inserire il NUMERO DI CASA del contatto: \n");
                  
    scanf("%f", &new_node->CONTATTO.numero_casa);
                  
    printf("Inserire l'INDIRIZZO EMAIL del contatto: \n");
                  
    scanf("%f", &new_node->CONTATTO.email);
                  
    printf("Inserire l'INDIRIZZO DI PAGINA WEB del contatto: \n");
                  
    scanf("%f", &new_node->CONTATTO.indirizzo_web);
                  
                  while ((
    succ!=NULL) && (new_node->CONTATTO.nome succ->CONTATTO.nome)) {
                        
    prec=succ;
                        
    succ=succ->contattoSuccessivo;
                        };
                  if (
    new_node==NULL) {
                        
    printf("Errore nell'allocazione della memoria. \n");
                        exit (
    1);
                        };   
                  if (
    prec==NULL) {   
                        
    new_node->contattoSuccessivo succ;
                        
    printf("Il contatto è stato inserito in rubrica. \n");
                        return 
    new_node;
                  } 
                  else {
                        
    new_node->contattoSuccessivo succ;
                        
    prec->contattoSuccessivo new_node;
                        
    printf("Il contatto è stato inserito in rubrica. \n");
                        return 
    L;
                        };
                        };
    PuntContatto_in_rubrica cancella_un_contatto(PuntContatto_in_rubrica Ltipi_contatti *CONTATTO) { // Funzione per la cancellazione di un contatto dalla rubrica.
                  
    PuntContatto_in_rubrica succprectemp;
                  
    printf("Inserire il nome del contatto da cancellare: \n");
                  
    scanf("%f", &temp->CONTATTO.nome);
                  
    prec NULL;
                  
    succ L;
                  
                  while ((
    succ != NULL) && (temp->CONTATTO.nome succ->CONTATTO.nome)) {
                        
    prec succ;
                        
    succ succ->contattoSuccessivo;
                        };
                  if (
    succ==NULL) {
                        
    printf("Il contatto da cancellare non è presente in rubrica. \n");
                        return 
    L;
                  }
                  else {
                        if (
    succ->CONTATTO.nome == temp->CONTATTO.nome) {
                                                                       if (
    prec==NULL) {
                                                                            
    succ->contattoSuccessivo;
                                                                            
    free (succ);
                                                                            
    printf("Il contatto è stato cancellato. \n");
                                                                            return 
    L;
                                                                       }
                                                                       else {
                                                                            
    prec->contattoSuccessivo succ->contattoSuccessivo;
                                                                            
    free (succ);
                                                                            
    printf("Il contatto è stato cancellato. \n");
                                                                            return 
    L;
                                                                       }; 
                        }
                        else {
                        return 
    L;
                        };
                        };
                  };

    PuntContatto_in_rubrica Cerca_contatto (PuntContatto_in_rubrica Ltipi_contatti *CONTATTO) { // Funzione per la ricerca di un contatto.
                  
    PuntContatto_in_rubrica temp;
                  
    printf("Inserire il Nome del contatto da ricercare: \n");
                  
    scanf("%f", &temp->CONTATTO.nome);
                  
                  while ((
    != NULL) && (temp->CONTATTO.nome L->CONTATTO.nome)) {
                        
    L->contattoSuccessivo;
                        
    printf("\n______________________________________________________________\n");
                        
    printf("\n %f \n %f \n %f \n %f \n %f \n %f \n %f \n"L->CONTATTO.nomeL->CONTATTO.cognomeL->CONTATTO.numeroL->CONTATTO.numero_casaL->CONTATTO.emailL->CONTATTO.indirizzo_web);
                        
    printf("\n______________________________________________________________\n");
                        };
                  if ((
    != NULL) && (L->CONTATTO.nome == temp->CONTATTO.nome)) {
                        return 
    L;
                  }
                  else {
                       
    printf("Contatto non trovato. \n");
                       return 
    NULL;
                  };
    };

    void visualizza_rubrica (PuntContatto_in_rubrica L) { // Funzione per la visualizzazione della rubrica.
                  
    PuntContatto_in_rubrica temp;
                  
    temp L;
                  while (
    temp != NULL) {
                                        
    printf(" NOME: %f\n"temp->CONTATTO.nome);
                                        
    printf(" COGNOME: %f\n"temp->CONTATTO.cognome);
                                        
    printf(" NUMERO: %f\n"temp->CONTATTO.numero);
                                        
    printf(" NUMERO DI CASA: %f\n"temp->CONTATTO.numero_casa);
                                        
    printf(" INDIRIZZO EMAIL: %f\n"temp->CONTATTO.email);
                                        
    printf(" INDIRIZZO DI PAGINA WEB: %f\n"temp->CONTATTO.indirizzo_web);
                                        
    printf("\n __________________________________________________________________ \n");
                                        
    temp temp->contattoSuccessivo;
                                        };
                  };
    int main () {
        
    PuntContatto_in_rubrica L;
        
    tipi_contatti CONTATTO;
        
    int scelta;
        
    printf("\n :) :) :) RUBRICA TELEFONICA :) :) :) \n");
        while (
    scelta != 5) {
              
    printf("\n 1- AGGIUNGI CONTATTO. \n");
              
    printf(" 2- CERCA CONTATTO. \n");
              
    printf(" 3- ELIMINA CONTATTO. \n");
              
    printf(" 4- VISUALIZZA RUBRICA. \n");
              
    printf(" 5- ESCI. \n\n");
              
              
    scanf("%d", &scelta);
              
              switch (
    scelta) {
                               case 
    :
                                    
    inserisci_in_ordine (L, &CONTATTO);
                                    break;
                                    
                               case 
    :
                                    
    Cerca_contatto (L, &CONTATTO);
                                    break;
                                    
                               case 
    :
                                    
    cancella_un_contatto (L, &CONTATTO);
                                    break;
                                    
                               case 
    :
                                    
    visualizza_rubrica (L);
                                    break;
                               }
    }
    system("PAUSE");
    return 
    0;

    E questo invece è l'errore risultante....

    codice:
    Firma problema:
      Nome evento problema:	APPCRASH
      Nome applicazione:	progetto esame 3.exe
      Versione applicazione:	0.0.0.0
      Timestamp applicazione:	4d793427
      Nome modulo con errori:	progetto esame 3.exe
      Versione modulo con errori:	0.0.0.0
      Timestamp modulo con errori:	4d793427
      Codice eccezione:	c0000005
      Offset eccezione:	0000149a
      Versione SO:	6.1.7600.2.0.0.768.3
      ID impostazioni locali:	1040
      Informazioni aggiuntive 1:	0a9e
      Ulteriori informazioni 2:	0a9e372d3b4ad19135b953a78882e789
      Ulteriori informazioni 3:	0a9e
      Ulteriori informazioni 4:	0a9e372d3b4ad19135b953a78882e789

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    La prima regola è: usare un puntatore che non si sa a cosa punti porta a pena infinita.
    Stai usando L (nel main) che non si sa a cosa punti (in gergo a spazzatura) e nelle funzioni lo usi (assegnandolo ad altri puntatori), cercando poi di accedere a campi che non esistono:
    succ->CONTATTO.nome ad esempio.
    Infine le funzioni restituiscono puntatori di cui si perdono le traccie.
    Riporto le parti interessate.
    codice:
    int main(etc) {
        PuntContatto_in_rubrica L = NULL;
        ...
              switch (scelta) {
                               case 1 :
                                    L = inserisci_in_ordine (L, &CONTATTO);
                                    break;
                                    
                               case 2 :
                                    L = Cerca_contatto (L, &CONTATTO);
                                    break;
                                    
                               case 3 :
                                    L = cancella_un_contatto (L, &CONTATTO);
                                    break;
                                    
                               case 4 :
                                    visualizza_rubrica (L);
                                    break;
                               }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    6
    Quindi come potrei aggiustarlo.... .....non sono molto bravo come avrai capito....sono tre giorni che cerco una soluzione per far funzionare questo programma e presentarlo all'esame...sto cercando sulle slide del prof su internet ma nn riesco ad uscirne....come potrei fare???....grazie davvero per l'aiuto...

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Intanto studia bene come usare la scanf:
    http://www.cplusplus.com/reference/c.../cstdio/scanf/
    visto che sbagli i flag di acquisizione richiedendo un float invece di una stringa e per di più assegnandolo a un char**.
    E poi come confrontare stringhe ASCIIZ con strncmp:
    http://www.cplusplus.com/reference/c...tring/strncmp/

    codice:
    // scanf("%f", &new_node->CONTATTO.nome); 
     scanf("%s", new_node->CONTATTO.nome);
    Non l'ho testato, ma a occhio dovrebbe essere una cosa del genere.
    codice:
                  PuntContatto_in_rubrica succ, prec, new_node;
                  new_node=(PuntContatto_in_rubrica)malloc(sizeof (struct Contatto_in_rubrica));
                  if (new_node==NULL) {
                        printf("Errore nell'allocazione della memoria. \n");
                        exit (1);
                  };   
                  // Annullo il puntatore al prossimo elemento.
                  new_node->contattoSuccessivo = NULL;
    
                  prec=NULL; // A che dovrebbe servire? I nuovi contatti si inseriscono alla fine.
                  succ=L;
                  
                  printf("Inserire il NOME del contatto: \n");
                  scanf("%s", new_node->CONTATTO.nome);
                  printf("Inserire il COGNOME del contatto: \n");
                  scanf("%s", new_node->CONTATTO.cognome);
                  printf("Inserire il NUMERO del contatto: \n");
                  scanf("%s", new_node->CONTATTO.numero);
                  printf("Inserire il NUMERO DI CASA del contatto: \n");
                  scanf("%s", new_node->CONTATTO.numero_casa);
                  printf("Inserire l'INDIRIZZO EMAIL del contatto: \n");
                  scanf("%s", new_node->CONTATTO.email);
                  printf("Inserire l'INDIRIZZO DI PAGINA WEB del contatto: \n");
                  scanf("%s", new_node->CONTATTO.indirizzo_web);
                  
                  if (succ == NULL) {
                 	    // Questo è il primo della lista. 
                 	    // Basta restituire il nodo allocato.
                 	    return new_node;
                  }
    
                  // Cerco l'ultimo elemento della lista.
                  // Qui ci si arriva dalla seconda chiamata della funzione in poi.              
                  while (succ->contattoSuccessivo!=NULL) {
                      succ = succ->contattoSuccessivo;
                  }
                  // succ adesso è l'ultimo elemento valido della lista.
                  // succ->contattoSuccessivo può puntare al prossimo contatto.
                  succ->contattoSuccessivo = new node;
                  return succ;
    /*              
                   && strncmp(new_node->CONTATTO.nome, succ->CONTATTO.nome, MAX_carattere) > 1) {
                        prec=succ;
                        succ=succ->contattoSuccessivo;
                        };
    
                  if (prec==NULL) {   
                        new_node->contattoSuccessivo = succ;
                        printf("Il contatto è stato inserito in rubrica. \n");
                        return new_node;
                  } 
                  else {
                        new_node->contattoSuccessivo = succ;
                        prec->contattoSuccessivo = new_node;
                        printf("Il contatto è stato inserito in rubrica. \n");
                        return L;
                        }; 
    */
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    C++ AIUTOOO non capisco il problema del mio codice
    Invito a usare titoli più significativi per le future discussioni, come indicato nel Regolamento.

    Qui l'ho corretto io (un minimo).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    6
    scusami davvero per la disattenzione ma mi era sfuggito di mente....sono nuovo non ho ancora molta esperienza... ...in futuro farò più attenzione..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.