Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [c] dubbio sulla fgets

  1. #1

    [c] dubbio sulla fgets

    Salve a tutti,
    dopo 2 anni che non toccavo il c eccomi di nuovo qui a bestemmiare
    In pratica devo usare il c per alcune lezioni all'uni ma ho alcuni problemi sulla fgets. Il "programma" che volevo realizzare semplicemente butta fuori in output una riga di comando letta e tagliata se supera n caratteri (scartando i caratteri di troppo).

    esempio di come dovrebbe funzionare (limitata a 3 caratteri la lettura e quindi 2+newline secondo il mio ragionamento):
    bertuz@bertuzmobile:~$ ./prova
    inserisci: c
    hai scritto: c

    inserisci: ci
    hai scritto: ci
    inserisci:

    inserisci: cia
    hai scritto: ci
    inserisci:


    MA IN REALTA' MI VA COSI'...

    bertuz@bertuzmobile:~$ ./prova
    inserisci: c
    hai scritto: c

    inserisci: ci
    hai scritto: ci
    inserisci: hai scritto:

    inserisci: cia
    hai scritto: ci
    inserisci: hai scritto: a

    inserisci:
    bertuz@bertuzmobile:~$


    =========================================
    Vi posto il codice. Ovviamente ricordo che la cosa era un pò ostica per input output di stringhe ma sto errore proprio.. bho! Le ho provate tutte (anche fflush(stdin)) ma sembra non funzioni a dovere..


    #include <stdio.h>

    int main(){

    char *risultato = (char *)malloc(sizeof(char)*4);

    while(1){
    printf("inserisci: ");
    fgets(risultato,3,stdin);
    fflush(stdin);
    printf("hai scritto: %s \n",risultato);
    }

    }


    bhoo se ci capite qualcosa.. ricambierò con un caffè
    Posso chiamare sistema operativo una cosa che per spegnere il pc devo cliccare su avvio?

  2. #2
    Non puoi provare con una scanf normale? Se si, io potrei aiutarti, ma visto l'oggetto del thread credo tu voglia usare esattamente la fgets.
    Andrea Gianfreda
    Designer on Makezone
    Milano, Como, Lugano, Lecce

  3. #3
    era per "questione d'onore" che volevo utilizzare la fgets . In caso posso usare scanf .
    Uhm che problemi ha scanf che non ricordo? Gli spazi?
    Posso chiamare sistema operativo una cosa che per spegnere il pc devo cliccare su avvio?

  4. #4
    Prova a compilare ed eseguire il seguente codice e fammi sapere se funziona correttamente
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
    char *risultato = (char *)malloc(sizeof(char)*4);
    
    while(1){
    
    printf("inserisci: ");
    fflush(stdin);
    fgets(risultato,3,stdin);
    printf("hai scritto: %s \n",risultato);
    
    }
    
    }
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  5. #5
    Se non sbaglio gli spazi, ma non ci metto la mano sul fuoco. Provaci e fammi sapere.

    PS: in che università sei, sei un prof o uno studente?

    Originariamente inviato da bertuz
    era per "questione d'onore" che volevo utilizzare la fgets . In caso posso usare scanf .
    Uhm che problemi ha scanf che non ricordo? Gli spazi?
    Andrea Gianfreda
    Designer on Makezone
    Milano, Como, Lugano, Lecce

  6. #6
    Originariamente inviato da andrea_NET-_DSL
    Prova a compilare ed eseguire il seguente codice e fammi sapere se funziona correttamente
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
    char *risultato = (char *)malloc(sizeof(char)*4);
    
    while(1){
    
    printf("inserisci: ");
    fflush(stdin);
    fgets(risultato,3,stdin);
    printf("hai scritto: %s \n",risultato);
    
    }
    
    }
    niente da fare, fflush è capriccioso :rollo:

    bertuz@bertuzmobile:~/universita/sistemi operativi lab$ ./prova
    inserisci: abcdefgh
    hai scritto: ab
    inserisci: hai scritto: cd
    inserisci: hai scritto: ef
    inserisci: hai scritto: gh
    inserisci: hai scritto:

    inserisci:
    Posso chiamare sistema operativo una cosa che per spegnere il pc devo cliccare su avvio?

  7. #7
    Ho risolto in modo un pò spartano . Ma non mi va giù sta storia delle fgets.. indagherò

    codice:
    #include <stdio.h>
    
      void leggi(char *risultato){
        int i=0;
        char c='\0';
    
        while( ((c=getchar()) != '\n') && (i>3)) {
          risultato[i++] = c;
        }
        risultato[i] = '\0';
      }
    
    int main(){
      char *risultato = (char *)malloc(sizeof(char)*4);
    
      while(1){
        printf("inserisci: ");
        leggi(risultato);
        fflush(stdin);
        printf("hai scritto: %s \n",risultato);
      }
    }
    ecco così non rompe


    Originariamente inviato da makeZoner's
    PS: in che università sei, sei un prof o uno studente?
    studio all'università di Trento
    Posso chiamare sistema operativo una cosa che per spegnere il pc devo cliccare su avvio?

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.