Ripulire lo standard input

di Anonimizzato4252 il
1 risposte
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

  • 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