Ripulire lo standard input

di il
1 risposte

Ripulire lo standard input

Salve, scusate per l'oggetto, ma nn sapevo come scriverlo meglio. Allora ho questo probelma, ho una funzione A, al cui interno richiedo un numero tramite getchera();, e dopo aver acquisito questo valore, lo passo ad una funzione B, che mi salva tutto quello che scriverà dalla tastiera finchè non premo invio. Il problema è che non entra proprio nel ciclo while, perchè è come se avesse ancora memorizzato il valore. Ecco un esempio che chiarisce meglio:

/*Nella funziona A, oppure nel main, è lo stesso*/
printf("Inserisci un numero\n");
	c = getchar();
	acquisisci(c);

/*Nella funzione acquisisci*/
void acquisisci(int Number)
{
	int c, i;
	char *BUFFER;
	
	/*alloca lo spazio per contenere una stringa di MAX_C caratteri*/
	BUFFER = (char *)malloc(100*sizeof(char));

	printf("Inserisci una stringa\n");
	
	i = 0;
	/*Acquisisco il primo carattere*/
	c = getchar();

	/*il ciclo acquisisce caratteri fino al raggiungimento di MAC_C caratteri acquisiti*/
	/*oppure finche' non si preme invio*/
	while(c != '\n')
	{
		BUFFER[i] = c;
		i++;
		c = getchar();
	}
	/*chiude la stringa*/
	BUFFER[i] = '\0';
	
	printf("La stringa che hai inserito è:  %s\n", BUFFER);
}
Questo è l'output:
Inserisci un numero
5
Inserisci una stringa
La stringa che hai inserito è:
Premi Invio per continuare!
Ecco, il programma termina, perchè è come se acquisici avesse anche il mio Invio e non entra nel while..ho provato fflush(stdin) ma nulla...come si potrebbe risolvere?

grazie

1 Risposte

  • Re: Ripulire lo standard input

    Ciao!
    Potresti provare la funzione bzero:
    void * bzero (void *_dest, size_t _num)

    dest = il puntatore da pulire
    num = il numero di bytes che si vuole pulire

    bzero ( buff, sizeof(buff) );

    al posto di sizeof ( buff ) puoi anche provare strlen(buff)

    Per usare questa funzione devi includere la libreria string.h
    Ciao!
Devi accedere o registrarti per scrivere nel forum
1 risposte