Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327

    [c] Programma compilato ma non funzionante; non trovo l'errore.

    Ciao a tutti ragazzi; all'unversià ci hanno lasciato di fare un programma capace di restituire la stringa in ingresso, e nel'eventualità in vui si siano inseriti numeri, ometterli.
    Il risultato che si dovrebbe ottenere scrivendo "ciao22 mo43433ndo" , dovrebbe essere "ciao mondo".

    Il programma viene compilato, ma quando faccio EOF non mi veiene restituito alcun valore.


    Ecco il sorgente:

    #include <stdio.h>
    void getline(char[]);
    main ()
    {int c,a;
    char vettore [1000];
    while((c=getchar())!=EOF)
    {getline(vettore) ;
    }
    printf ("%s", vettore);
    }

    void getline (char vettore[])
    {int c,i;
    for (i=0; (c=getchar())!= '1' || c!='2' ||
    c!='3'||c!= '4'||c!= '5'||c!= '6' ||c!= '7'
    ||c!= '8'||c!= '9'; i++)
    vettore [i]=c;
    }

  2. #2
    io metterei, tanto per incominciare, una sola chiamata alla funzione getchar, non due.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da MacApp
    io metterei, tanto per incominciare, una sola chiamata alla funzione getchar, non due.
    Ciao, grazie per la risposta.
    Ho provato a omettere c=getchar laddove era ripetuto la seconda volta, ovvero dentro la funzione scrivendo semplicemente c!= ' x'|| c!= 'y' ecc...
    Contiuna a non funzionare, pero' in modo diverso.
    Mentre la prima volta mi consentiva di fare EOF, sta volta dopo avere digitato la mia frase e cliccato su invio non mi consente neppure di fare l'EOF ma mi rimane il trattino bianco lampeggiante senza la possibilità di scriere nient'altro.
    grazie per l'aiuto

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    569
    Perchè non fai una cosa del tipo:
    1) Leggi la stringa con gets()
    2) Elabori la stringa per togliere le cifre
    3) Stampi la stringa 'pulita'

    Nella funzione elabora potresti usare la funzione isdigit(char)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da labrosan
    Perchè non fai una cosa del tipo:
    1) Leggi la stringa con gets()
    2) Elabori la stringa per togliere le cifre
    3) Stampi la stringa 'pulita'

    Nella funzione elabora potresti usare la funzione isdigit(char)
    Grazie per la risposta. Pero' il professore vuole che lo facciamo con cose cha biiamo studiati.E purtroppo non abbiamo fatto nè gets() nè la funzione isdigit.


    Visto che a livello teorico il mio dovrebbe funzionare, lo vorrei far funzionare così.
    Poi vorrei farlo come ho sentito da qualche mio compagno che ha usato lo squeeze e lo switch.

    Grazie per l'aiuto in anticipo

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    569
    Innanzi tutto il getchar deve essere solo uno, come ti hanno gia fatto notare.
    La condizione di uscita del for in getline è sbagliata: Se vuoi escludere tutte le cifre devi usare l'operatore && (and) e non || (or). Comunque sarebbe sbagliato ugualmente perchè il ciclo terminerebbe alla prima cifra incontrata, invece si deve scorrerre la stringa fino al fondo.

    Ad es:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    void getline(char []);
    
    int main ()
    {
        int c,a;
        char vettore [1000];
    
        getline(vettore) ; 
        
        printf ("%s\n\n", vettore); 
    
        system("pause");
      
    }
    
    void getline (char vettore[])
    {  
         int i=0;
         char c='\0';
         
         while ( (c=getchar()) != '\n' )
           if ( c!='1' && c!='2' && c!='3' && c!='4' && c!='5' && c!='6' && c!='7' && c!='8' && c!='9' && c!='0'  )
               vettore[i++]=c;
                    
         return;    
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da labrosan
    Innanzi tutto il getchar deve essere solo uno, come ti hanno gia fatto notare.
    La condizione di uscita del for in getline è sbagliata: Se vuoi escludere tutte le cifre devi usare l'operatore && (and) e non || (or). Comunque sarebbe sbagliato ugualmente perchè il ciclo terminerebbe alla prima cifra incontrata, invece si deve scorrerre la stringa fino al fondo.

    Ad es:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    void getline(char []);
    
    int main ()
    {
        int c,a;
        char vettore [1000];
    
        getline(vettore) ; 
        
        printf ("%s\n\n", vettore); 
    
        system("pause");
      
    }
    
    void getline (char vettore[])
    {  
         int i=0;
         
         
         while ( (c=getchar()) != '\n' )
           if ( c!='1' && c!='2' && c!='3' && c!='4' && c!='5' && c!='6' && c!='7' && c!='8' && c!='9' && c!='0'  )
               vettore[i++]=c;
                    
         return;    
    }
    Ciao, anzitutto grazie per la risposta. Ho capito perfettamente il perchè dovevo mettere l'&& anzichè ||.
    Non riesco pero' a capire perchè non funziona se tolgo char c='\0';
    Ho fatto la prova a toglierlo perchè non capivo l'utilià; non nel senso che dico che è inutile, ma proprio che non riesco a capirla.
    Se me la potessi spiegare te ne sarei grato.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nella getline usi la variabile locale c ... devi indicarlo necessariamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    569
    La variabile char c va dichiarata prima di essere usata,
    altrimenti il compilatore non la riconosce.

    L'inizializzazione c='\0' in questo caso non è obbligatoria

    ps: La variabile int c presente nel main deve essere cancellata.
    Serviva nel tuo programma perchè facevi il getchar() nel main.
    Mi sono dimenticato di eliminarla.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da labrosan
    La variabile char c va dichiarata prima di essere usata,
    altrimenti il compilatore non la riconosce.

    L'inizializzazione c='\0' in questo caso non è obbligatoria

    ps: La variabile int c presente nel main deve essere cancellata.
    Serviva nel tuo programma perchè facevi il getchar() nel main.
    Mi sono dimenticato di eliminarla.
    Ho capito!
    Ti ringrazio molto.

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.