[C] Errore con fgets()

di il
6 risposte

[C] Errore con fgets()

Come compilatore ho Dev-C++, mi sa che sia lui che non funzioni bene perchè se scrivo:
    char a[100];
    fgets(a,100,stdin); 
    printf("%s",a);
Non funziona. Mentre se scrivo:
    char a[100];
    fgets(a,100,stdin); 
    printf("%s",a);
    char b[100];
    fgets(b,100,stdin); 
    printf("%s",b);
Funziona.

Ma lo fa solo con il progetto che sto creando, non succede con gli altri progetti.

6 Risposte

  • Re: [C] Errore con fgets()

    Devi utilizzare CodeBlocks, Dev-C++ non è + aggiornato. Non so dirti da cosa deriva l'errore ma con Visual Studio funziona in tutti e due i casi.
  • Re: [C] Errore con fgets()

    Sì, il codice da solo come lo ho postato funziona anche a me, ma insieme al resto funziona solo il secondo caso. Credo che sia a causa del buffer, ora provo a risolvere il problema. Ciao
  • Re: [C] Errore con fgets()

    Ho risolto mettendo fflush(stdin); dopo ogni rischiesta di input
    #include <stdio.h>
    #include <conio.h>
    int main() {
        char a[100];
        fgets(a,100,stdin);
        fflush(stdin); // In <stdio.h>
        printf("%s",a);
        getch();
        fflush(stdin);
        return 0;
    }
  • Re: [C] Errore con fgets()

    Siccome dai errori si impara, leggi quì:
    https://www.iprogrammatori.it/forum-programmazione/cplusplus/ragazzi-gentilmente-una-mano-t10186.html#p8466945
  • Re: [C] Errore con fgets()

    In effetti su windows funziona, ma non su unix.
    Se l'amico fosse interessato e' disponibile su sf.net in-dev
    googla 'in-dev sf'

    Max
  • Re: [C] Errore con fgets()

    ixamit ha scritto:


    In effetti su windows funziona, ma non su unix.
    Lo so, anche per questo motivo conio.h non è standard del C. Quindi potrei fare:
    #include <stdio.h>
    #if WIN32
    # include <conio.h>
    # define pause() getch();fflush(stdin)
    // Potrei usare system("PAUSE>NUL")
    #else
    # define pause() getchar();fflush(stdin)
    #endif
    
    int main() {
        char a[100];
        fgets(a,100,stdin);
        fflush(stdin);
        printf("%s",a);
        pause();
        return 0;
    }
    Così non dovrebbe dare errori a nessun sistema operativo.
Devi accedere o registrarti per scrivere nel forum
6 risposte