andry90+
Allora ho provato in questo modo, e non capisco perche con gli interi funziona, invece con i char esce dal ciclo al terzo carattere!! OMG
Codice:
int main()
int i;
char c,s1[5];
for(i=0;i<5;i++)
{
scanf("%c",&c);
s1[i]=c;
}
E' normale, quando vuoi inserire dei caratteri, poniamo ad esempio la sequenza "casa", i tasti che premerai con questo algoritmo sono:
-c
-invio
-a
-invio
-s
-invio
-a
-invio
Dato che il vettore di caratteri è lungo 5, quello che conterra' al termine dell'algoritmo sara':
Codice:
s1 = { 'c', '\n', 'a', '\n', 's' }
Il problema è che tutto quello che digiti sulla tastiera viene bufferizzato, e la scanf legge da questo buffer scartando i caratteri uno alla volta in questo caso, quindi premendo sulla tastiera c,invio,a,invio, ecc ecc e usando lo specificatore di formato '%c' all'interno della scanf essa consumera' il buffer un carattere alla volta, e l'invio è un vero e proprio carattere nell'ANSI.
Per risolvere il problema, aggiungi una getchar() subito dopo s1[i]=c in modo da consumare il \n dato dall'invio, altrimenti questo \n rimarra' nel buffer e alla iterazione seguente verra' letto dalla scanf.
Con gli interi questo problema non si verifica perche' lo specificatore %d dello scanf opera in questa maniera:
-guardo il buffer di tastiera
-il primo elemento è un numero?
----SI: lo prendo e lo elimino dal buffer
----NO: lo elimino dal buffer e analizzo il successivo
Quindi se volessimo inserire i numeri dall'1 al 5 premeremmo 1,invio,2,invio,3,invio,4,invio,5,invio e a ogni iterazione dove il buffer inizia con l'invio (che è un carattere e non un numero) la scanf scarta quel \n e legge l'elemento successivo.
Spero di essere stato chiaro