scanf() restituisce il numero di input validi, quindi in questo devi verificare che effettivamente restituisca 1:

codice:
#include <stdio.h>

int main()
{
	int n;

	while( 1 )
	{
		printf( "Inserisci un numero da 1 a 30: " );

		if( scanf( "%d", &n ) != 1 )
		{
			fprintf( stderr, "HO DETTO UN NUMERO! $&£%#@*\n" );
			while( getchar() != '\n' );
			continue;
		}

		if( ( n < 1 ) || ( n > 30 ) )
		{
			fprintf( stderr, "Da 1 a 30!\n" );
			continue;
		}

		break;
	}

	return 0;
}
Ciao.