Svuotare buffer stdin

di Anonimizzato18055 il
6 risposte
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

  • Dovresti provare con
    while(getchar() == '\n') ;
    Nota il punto e virgola finale.
  • Non va lo stesso
  • Chiedo scusa, non sapevo che i due forum fossero diciamo collegati.. allora potete eliminare una delle 2 discussioni
  • Non sono collegati. E' in questo che il crossposting è vietato, leggi il regolamento.
  • Visto che ho risolto, se mi dici come posso fare la elimino subito
Devi accedere o registrarti per scrivere nel forum
6 risposte