Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35

    stringhe in c che incubooooooo!!!

    Ciao a tutti vorrei che mi aiutaste nel risolvere questo piccolo problema con il linguaggio C.
    allora io ho un file di testo che si chiama agenda.txt nel queale ci sono queste tre stringhe:
    pippo pluto 0293255165
    andrea porri 111111
    luis filippo 0147896

    io vorrei visualizzare il contenuto di questo file (agenda.txt) e nello stesso tempo riordinare (per nome) in ordine alfabetico le tre stringhe,
    in modo tale che io abbia sullo schermo questo:
    andrea porri 111111
    luis filippo 0147896
    pippo pluto 0293255165
    controllatemi il mio codice sorgente e ditemi dove sbaglio grazie. ho utilizzato uno switch come menu il mio problema si trova nel case 2.

    codice sorgente:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>


    int scelta;
    int menu (void);
    void registra_utente(char *a, char *b , char *c);
    int comp(const void *s1 , const void *s2);

    int main()
    {
    FILE *fp;
    char nomeutente[81], cognomeutente[81], telefono[15];
    char rubrica[20];


    int scelta = menu();

    switch (scelta)
    {
    case 1:
    {
    fflush(stdin);
    printf("\nInserisci il nomeutente , il cognomeutente e il numero di telefono");
    printf("\nseparati da uno spazio vuoto\n");
    scanf("%s%s%s" , nomeutente,cognomeutente,telefono);
    fflush(stdin);
    registra_utente(nomeutente , cognomeutente , telefono);
    break;
    }
    case 2:
    {

    if ( (fp = fopen("agenda.txt" , "r" )) == NULL)
    {
    printf("\nErrore apertura file");
    exit(1);
    }

    while ( !feof(fp) )
    {
    fgets(rubrica, sizeof(rubrica), fp);
    qsort(rubrica , 20 , sizeof(rubrica[0]), comp);
    printf("%s" , rubrica);
    }
    fclose(fp);
    break;
    }
    case 3:
    {
    printf("hai scelto 3");
    break;
    }
    case 4:
    {
    printf(" hai scelto 4");
    break;
    }
    default:
    {
    puts("fuori intervallo massimo riprova");
    }
    }

    system("PAUSE");
    return 0;
    }
    /* intestazione e definizione della funzione menu*/
    int menu (void)
    {
    int numero;
    printf("PROGRAMMA AGENDA .\n");
    printf("\n");
    puts("Scegli una funzione");
    printf("\n");
    printf("1 - Inserire Contatto\n");
    printf("2 - Leggere Rubrica\n");
    printf("3 - Ricerca contatto\n");
    printf("4 - Uscire dal programma\n");
    scanf("%d" , &numero);
    return numero;
    }

    /*funzioneper inserire nome,cognome e num_tel dell'utente*/
    void registra_utente(char *a, char *b , char *c)
    {
    FILE *fp;
    if ( (fp = fopen("agenda.txt" , "a+" )) == NULL)

    {
    printf("\nErrore apertura file");
    exit(1);
    }
    fprintf(fp, "%s %s %s\n" ,a,b,c);
    fclose(fp);
    }

    /* funzione comp per il confronto in qsort*/
    int comp(const void *s1, const void *s2)
    {
    return (strcmp(*(char **)s1, *(char **)s2));
    }

  2. #2
    devi ordinare le stringhe "nome cognome telefono"
    prima di registrarle nel file...

    1)inserisci le 3 stringhe nome, cognome, telefono
    2)le concateni in un'unica stringa "rubrica" (p.s. potresti anche utilizzare direttamente una sola stringa chiamata rubrica.)
    3)ora apri il file agenda.txt
    4)con fgets() leggi le singole righe (stringhe composte da nome, cogn., tel.) e le inserisci in un array
    5)ora inserisci rubrica "al punto giusto" (aaa, bbb, ccc)
    6)poi apri il file agenda in input --> quindi cancellando tutto
    il suo contenuto, e inserisci l'intero array ORDINATO.

    p.s. se fai così, in fase di lettura dell'agenda troverai sempre
    il contenuto del file ordinato.
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35
    ok ci provo... poi ti farò sapere
    grazie...

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35

    stringa

    senti non riesco a fare come dici tu, puoi farmi un esempio semplice affinchè io possa capire?
    grazie e ciao

  5. #5
    Utente di HTML.it L'avatar di AR64S-H
    Registrato dal
    Jun 2002
    Messaggi
    568
    Mi spieghi perchè hai usato questo comando
    qsort(rubrica , 20 , sizeof(rubrica[0]), comp);

    io se lo lascio non riesco a visualizzare i nomi in modo ordinato l'ho canellato e riesco a visualizzarli bene.
    Grazi
    Ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35
    senti ma come fai a visualizzare quei dati inseriti in ordine alfabetico senza una funzione che ordina i dati...cosi tu li leggi certo ma non in ordine alfabetico!!

  7. #7
    Secondo me potresti usare questo metodo. Prima di tutto crei una struttura del tipo:

    codice:
    struct info
    {
        /* evito allocazioni per semplicita` */
        /* le dimensioni sono indicative */
    
        char nome[ 24 ];
        char cognome[ 32 ];
    
        char telefono[ 16 ];
    
        struct info *next;
    };
    Questa sara` il nodo di una lista ordinata.

    Man mano che leggi le righe dal file, le inserisci in nodi di questo tipo. Nell`operazione di inserimento nella lista, verifichi l`ordine alfabetico nome-cognome.

    Completata la lettura da file, e quindi la lista, ci fai quello che ti pare, e sara` anche ordinata.

    Per chiarimenti posta qui.. pero` provaci anche da solo almeno! :tongue:

    Ciao.

  8. #8
    Utente di HTML.it L'avatar di AR64S-H
    Registrato dal
    Jun 2002
    Messaggi
    568
    Per matis25:

    Il risultato a video con il comando qsort è tipo:

    io3535 ssio245srfkc
    loa34552p fer3345rrar3
    Per questo l'ho cancellato

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    35

    stringhe in c

    ciao scusa se ti disturbo..
    se io nel mio file agenda.txt ho queste tre stringhe(pero' potrei averne molte di più)
    giuseppe garibaldi 123456
    giulio gesare 258963
    andrea rossi 1478963
    come faccio a leggere il file (ok con fopen) e ad inserire i nomi nell'elemento della struttura char nome , i cognomi nell'elemento della struttura cognome e il numero di telefono nell'elemento della struttura telefono... questo è il mio primo problema potresti aiutarmi?
    code:
    struct info
    {
    /* evito allocazioni per semplicita` */
    /* le dimensioni sono indicative */

    char nome[ 24 ];
    char cognome[ 32 ];

    char telefono[ 16 ];

    struct info *next;
    };



    Questa sara` il nodo di una lista ordinata.

    Man mano che leggi le righe dal file, le inserisci in nodi di questo tipo. Nell`operazione di inserimento nella lista, verifichi l`ordine alfabetico nome-cognome.

    Completata la lettura da file, e quindi la lista, ci fai quello che ti pare, e sara` anche ordinata.

    Per chiarimenti posta qui.. pero` provaci anche da solo almeno!

  10. #10
    Si tratta di fare uno strncpy() (strcpy() per n caratteri), non ci vuole la scienza. E non mi chiedere come si usa, non a me..

    Ciao.

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.