Svuotare buffer stdin

di il
6 risposte

Svuotare buffer stdin

Ciao ragazzi ho un problema con questo codice:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> //definisce macro STDIN_FILENO, STDERR_FILENO, STDOU_FILENO

#define MAX_SIZE 50

/*Scrivere un programma in linguaggio C che, utilizzando le funzioni di I/O a basso livello, in un ciclo infinito:
-Legge dallo standard input una stringa S
-Visualizza su standard error la stringa S
-Il programma termina quando l’utente digita la stringa “fine”
Cosa è necessario modificare nel codice affinché il programma legga l’input da un file invece che da standard input?*/

int main()
{
    char *s = malloc(sizeof(char)*MAX_SIZE);
    do{
    int r = read(STDIN_FILENO, s, MAX_SIZE);
    if(r==-1) printf("errore");
    else{
        write(STDERR_FILENO, s, MAX_SIZE);
    }
    while(getchar()!='\n');
    }while(strcmp(s,"fine\n")!=0);
    free(s);
    return 0;
}

il problema è che mi produce output sbagliato, infatti stdin non risulta ''pulito'' ad ogni iterazione del do while. So che in windows si usa fflush(stdin) ma girando in rete ho visto che questa funzione non è portabile in linux. visto che io uso linux, sempre girando in rete ho visto che molti dicono che la soluzione sia ''while(getchar()!='\n''' al posto di fflush, ma il problema non si è risolto. Sapete spiegarmi perchè?

6 Risposte

Devi accedere o registrarti per scrivere nel forum
6 risposte