Nota inicial: para dar color al código, la etiqueta code tienes que dejarla así (pero sin espacios): [ code = c ]
x=n;
y=n-x;
if(y==0)
{
Si x = n entonces y = 0, luego siempre va a entrar en el if. Eso no tiene demasiado sentido, no?
Además la asignación x = n te genera otro problema y es que estás usando el mismo valor en dos variables. Quiero decir, luego no modificas ni n ni x, por lo que te puedes ahorrar el uso de una de las dos variables.
Si lo que quieres es limitar la entrada a números enteros, puedes hacerlo así:
int dato;
// leemos un numero entero
// lo convertimos a float
float n = (float)dato;
Mas cosillas, lo del uso de fmod no lo he terminado de entender. Me explico:
z=fmod(x,2);
if((x>0) && (x<28))
{
if(z==1)
La validación del rango de valores ( de 1 a 27 ) debería comprobarse nada más recibir el dato por parte del usuario, no 6 líneas más abajo. Dicho de otra forma, si el usuario introduce un dato incorrecto lo normal es avisarle en ese mismo momento, además el código te quedará más claro.
Si lo que quieres saber es si un número es par o impar tienes opciones mucho más sencillas, rápidas y eficientes:
// Comprobar si el número es par
if ( x % 2 == 0 )
// Comprobar si el número es impar
if ( x % 2 != 0 )
Lo de que te salga mal el resultado ahora no lo puedo mirar porque no puedo compilar tu código ahora. Si tengo tiempo luego y nadie te ha contestado intento ayudarte más.
Un saludo.