Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Confronto elementi di una lista in C

    Salve ragazzi ho qualche problema con questo programma vi posto la consegna:
    Definire una struttura che permetta di gestire i dati contenuti in un rubrica telefonica.
    Creare un programma in linguaggio C che gestisca l’immissione dei dati da tastiera
    dei dati della rubrica. Terminare la procedura di immissione dei dati quando si
    verifica una di queste condizioni:
    ⇒ l’informazione per il campo numero è uguale a -1
    ⇒ il cognome immesso è uguale ad uno precedentemente immesso
    => Salvare la lista su file
    Il programma che ho fatto io è questo

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <string.h>
    
    typedef struct rubrica
    {
        char nome[16];
        char cognome[16];
        char numero[16];
        rubrica *next;
    } rubrica;
    rubrica *Add_to_list(rubrica *head,char nome[],char cognome[],char numero[])
    {
        rubrica *a;
        a=(rubrica*)malloc(sizeof(rubrica));
        strcpy(a->nome,nome);
        strcpy(a->cognome,cognome);
        strcpy(a->numero,numero);
        a->next=NULL;
        /*if(head==NULL)
        return a;*/
        a->next=head;
        return a;
    }
    rubrica *Print_list(rubrica *head)
    {
        int i=0;
        printf("Lista: \n");
        while(head!=NULL)
        {
            printf("%d)\nnome:%s\ncognome:%s\nnumero:%s\n",i++,head->nome,head->cognome,head->numero);
            head=head->next;
        }
    }
    rubrica *confronto(rubrica *head,char test[])
    {
    
        for(; head!=NULL; head=head->next)
        {
    
            if(strcmp(head->cognome,test)==0)
            {
                break;
            }
        }
    }
    /*rubrica *Search_in_list(rubrica*head,char test[])
    {
            if(head==NULL)
            return NULL;
            while(head!=NULL)
            {
                             if (strcmp(head->cognome,test)!=0)
                             break;
    
                             head=head->next;
    
    
    
    
    
    
                             }
                            return NULL;
                             }*/
    
    rubrica Save_to_file(rubrica *head)
    {
        FILE*fp;
        fp=fopen("fname.txt","w");
        if(fp!=NULL)
        {
            while(head!=NULL)
            {
                fprintf(fp, "nome:%s\ncognome:%s\nnumero telefonico:%s\n",head->nome,head->cognome,head->numero);
                head=head->next;
            }
        }
    }
    
    main()
    {
        rubrica a;
    
        char file[16];
        rubrica*head = NULL;
        printf("inserisci elementi \n");
        strcpy(a.numero,"0");
        while(strcmp(a.numero,"-1")!=0 )
        {
            printf("Nome:");
            scanf("%s",a.nome);
            printf("Cognome:");
            scanf("%s",a.cognome);
            printf("Numero di telefono:");
            scanf("%s",a.numero);
            getchar();
            head=Add_to_list(head,a.nome,a.cognome,a.numero);
            confronto(head,a.cognome);
        }
    
        Print_list(head);
        Save_to_file(head);
    
        getchar();
    }
    Il programma funziona tutto solo che non riesco a implementare la funzione confronto ovvero nn mi legge il break al suo interno...Se vedete inoltre commentato c'è anche un altro metodo per fare la funzione...
    Avete qualche suggerimento da darmi?
    Ah vorrei dirvi che il programma secondo consegna del prof a lezione lo posso fare solo con le liste... Preciso che nn si tratta di un compito in classe ma solamente di un'esercitazione da svolgere a casa per acquisire praticità con le liste...
    Grazie in anticipo per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Senza i tag CODE per il codice e senza indentazione né separazione tra le varie funzioni, non si capisce nulla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Moderazione

    Indentazione e tag CODE più o meno sistemati, in futuro ricordatene...
    Amaro C++, il gusto pieno dell'undefined behavior.

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.