Scusa ma ho ancora un dubbio con la getchar (e in generale le funzioni per ricevere o stampare) che mi fa sempre casini nei cicli.
In questo caso il pezzo di codice:
codice:
while(getchar() != '\n');
Da un' istruzione vuota nel while,come a dire: fermati finche' non digito accapo.
Cosi' svuota il buffer che era gia' pieno.Ma se per ipotesi fosse stata la prima volta che usavo la getchar,l' istruzione ha l' effetto di ritardare la partenza del programma,posto un codice come esempio:
codice:
do
    {
    while(getchar()!=10)
      ;
    printf("Digita base: ");
    scanf("%f",&base);
    printf("Digita esponente: ");
    scanf("%d",&esp);
    printf("%.0f^%d= %.2f",base,esp,potenza(base,esp));
    printf("\ncontinuare o uscire?");
    gets(terminatore);
    printf("\n");
    }while(strcmp(terminatore,"esci")!=0);
In questo caso siccome era la prima volta che usavo la getchar,all' inizio del programma non compare nessuna scritta e se digito un qualsiasi tasto mi va avanti con l' esecuzione del programma normale (Mi stampa: digita base,riceve base,ecc...).
Ma come si fa a svuotare il buffer in un ciclo essendo la prima volta che uso la getchar?
In questo caso se sposto la parte del codice che dice:
codice:
while(getchar()!=10)
      ;
in fondo al ciclo,se digito esci non mi finisce il ciclo,se lo metto all' inizio come ho fatto nell' esempio non parte finche' non digito un tasto...ma devo per forza usare l' espressione:
codice:
if(i>=1)
while(getchar()!=10)
      ;
Con i che e' una variaible inizializzata a zero e incrementata a fine ciclo...oppure c'e' un altro metodo?