Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: [C]Funzione gets

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    101

    [C]Funzione gets

    Il codice proposto si occupa della creazione e dell'inserimento in una lista ordinata di nomi in cui implementerò anche la cancellazione in un secondo momento....
    la cosa che non capisco è perchè nel primo ciclo for (quello in cui si deve inserire il nome della
    persona)mi salta un ciclo e stampa a schermo solo i printf non richiamando le funzioni gets e insert!

    codice:
    #include<stdio.h> #include<stdlib.h> typedef struct nodo { char Nome[30]; struct nodo *Punt; }NODO; NODO *Insert(NODO *Old,char *Parola); void Visualizza(NODO *Lista); void Ricerca(NODO *Lista,char *Parola); main() { int a,i; char persona[30]; NODO *HEAD; HEAD=NULL; printf("quanti nomi?"); scanf("%d",&a); for(i=0;i<a;i++) { printf("\n inserisci il nome della persona\n"); gets(persona); HEAD=Insert(HEAD,persona); printf("\nciclo for\n"); } Visualizza(HEAD); printf("Chi vuoi eliminare ?\n"); gets(persona); system("pause"); Ricerca(HEAD,persona); printf("\n dopo eliminazione"); Visualizza(HEAD); system("pause"); } NODO *Insert(NODO *Old,char *Parola) { NODO *Nuovo; //equivale a OLD==NULL if(Old==NULL||((strcmp(Parola,Old->Nome)<1))) { Nuovo=(NODO *)malloc(sizeof(NODO)); strcpy(Nuovo->Nome,Parola); Nuovo->Punt=Old; Old=Nuovo; } else { Old->Punt=Insert(Old->Punt,Parola); } return Old; } void Visualizza(NODO *Lista) { if(Lista==NULL) printf("NULL\n"); else { printf("%s --->",Lista->Nome); Visualizza(Lista->Punt); } } void Ricerca(NODO *Lista,char *Parola) { NODO *app; if(Lista!=NULL) { if(strcmp(Parola,Lista->Nome)==0) { printf("parola trovata\n"); app=Lista->Punt; Lista=app; Visualizza(Lista); } else Ricerca(Lista->Punt,Parola); } else printf("parola non trovata e lista non modificata"); }

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    101
    Ecco il codice non in un unica riga....
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct nodo
    { char Nome[30];
    struct nodo *Punt;

    }NODO;

    NODO *Insert(NODO *Old,char *Parola);
    void Visualizza(NODO *Lista);
    void Ricerca(NODO *Lista,char *Parola);

    main()
    { int a,i;
    char persona[30];
    NODO *HEAD;
    HEAD=NULL;
    printf("quanti nomi?");
    scanf("%d",&a);

    for(i=0;i<a;i++)
    {
    printf("\n inserisci il nome della persona\n");
    gets(persona);
    HEAD=Insert(HEAD,persona);
    printf("\nciclo for\n");
    }
    Visualizza(HEAD);
    printf("Chi vuoi eliminare ?\n");
    gets(persona);
    system("pause");
    Ricerca(HEAD,persona);
    printf("\n dopo eliminazione");
    Visualizza(HEAD);
    system("pause");
    }


    NODO *Insert(NODO *Old,char *Parola)
    {
    NODO *Nuovo;
    //equivale a OLD==NULL
    if(Old==NULL||((strcmp(Parola,Old->Nome)<1)))
    {
    Nuovo=(NODO *)malloc(sizeof(NODO));
    strcpy(Nuovo->Nome,Parola);
    Nuovo->Punt=Old;
    Old=Nuovo;
    }
    else
    {
    Old->Punt=Insert(Old->Punt,Parola);
    }
    return Old;
    }

    void Visualizza(NODO *Lista)
    {
    if(Lista==NULL)
    printf("NULL\n");
    else
    {
    printf("%s --->",Lista->Nome);
    Visualizza(Lista->Punt);
    }

    }

    void Ricerca(NODO *Lista,char *Parola)
    {
    NODO *app;
    if(Lista!=NULL)
    {
    if(strcmp(Parola,Lista->Nome)==0)
    {
    printf("parola trovata\n");
    app=Lista->Punt;
    Lista=app;
    Visualizza(Lista);
    }
    else
    Ricerca(Lista->Punt,Parola);
    }
    else
    printf("parola non trovata e lista non modificata");
    }

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cerca in questo stesso forum tutto quello che riguarda lo

    "svuotamento del buffer di input"

    trattato innumerevoli volte.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    101
    Perfetto trovato.Bisognava svuotare il buffer di input con la funzione fflush(stdin).

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quella vale solo per Microsoft ... ti consiglio il ciclo while ... cerca meglio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    fseek(stdin,0,SEEK_END);

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da ramy89
    codice:
    fseek(stdin,0,SEEK_END);
    Hai provato se funziona con Linux?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    No, funziona su Mac, su linux sembrerebbe proprio che ignora il comando.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da ramy89
    No, funziona su Mac, su linux sembrerebbe proprio che ignora il comando.
    Ecco perché consigliavo il while con il getchar ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    101
    oregon cito un attimo wikipedia perchè sto facendo confusione.
    "fflush è una funzione del linguaggio C definita nella libreria standard ANSI C e dichiarata nell'header file stdio.h "
    non dovrebbe quindi valere per tutti i sistemi operativi?

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.