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:
codice:
	char mess[200];
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");