Originariamente inviato da sparkling
Sto realizzando un progetto per l'universita' e di fronte a questo codice ho riscontrato un problema...
do
{
printf("\n-? ");
ris = scanf("%d CIAO %s",&m,&mess);
}
while(ris != 2);
mess e' un
char e m un int ovviamente...
In pratica quello che dovrebbe fare e' entrare in ciclo fintanto che la stringa digitata da shell non e' quella giusta, ovvero "
intero CIAO
stringa".
mess deve puntare ad un vettore di char, non va bene se è un singolo char.
ad es:
Tu come hai dichiarato mess?
Avevo pensato di controllare che la scanf tornasse 2, in quanto se va a buon fine effettivamente ritorna 2 mettendo l'intero in m e la stringa in mess ed esce dal ciclo. Il problema arriva se non scrivo la cosa giusta poiche' entra nel do, fa la scanf una volta, digito la cosa sbagliata e a quel punto non fa piu' la scanf ma cicla all'infinito stampando
-?..
Perche' la scanf funziona una volta sola?
Ho provato a cercare di metterci fflush per liberare il buffer ma non funziona ugualmente e poi sinceramente non ne capisco tanto il senso... :master:
Se potete darmi una mano ve ne sarei grata...
Prova a svuotare il buffer di input in questo modo :
codice:
char mess[80];
int ris, m, i;
for( i=0; i<3; i++)
{
do
{
printf("\n-? ");
ris = scanf("%d CIAO %s",&m, mess);
while( getchar()!='\n'); // <<<Svuoto il buffer di input (stdin)...
}
while(ris != 2);
printf("\nDati inseriti : \n");
printf("int = %d\n", m);
printf("char* = '%s'\n", mess);
}
printf("\nFine.\n");