Como colocar OR dentro de un while de diferencia

Iniciado por Naimaderis, 25 Diciembre 2016, 07:33 AM

0 Miembros y 1 Visitante están viendo este tema.

Naimaderis

Hola, estaba haciendo un programa el cual pedia insertar 10 numeros del 1 al 5, si el usuario insertaba un numero que no estaban dentro de ese rango, el programa en vez de pedir 10 pedia 9, y si insertaba otro, pedia 8, en otras palabras, lo contaba como ingresado.

Para solucionar esto, ingrese la siguiente linea:

while (n[j] != 1 || 2 || 3 || 4 || 5)

El problema esta, en que no funciona correctamente, nunca sale del bucle, entonces mi pregunta es:

¿Que es lo que le estoy diciendo que haga con esa linea?

¿Como puedo decirle que si n[j] no es 1 ni 2, ni 3, ni 4, ni 5, se ejecute el while?

Si saco el while, el codigo funciona bien y hace lo que tiene que hacer, pero lo dejo, por las dudas.


#include <stdio.h>

#define ENCUESTADOS 3

int main(){

    int j;
    int a=0;
    int b=0;
    int c=0;
    int d=0;
    int e=0;
    int n[ENCUESTADOS];
    int k[4];

    printf("Inserte calidad 1,2,3,4,5 \n");

    for(j = 0; j < ENCUESTADOS;j++)
    {
        scanf("%d",&n[j]);

        while (n[j] != 1 || 2 || 3 || 4 || 5)
        {
            printf("%d",n[j]);
            printf("inserte numero entre 1 y 5 \n");
            scanf("%d",&n[j]);
        }
    }

    for(j=0;j < ENCUESTADOS;j++)
    {
        switch(n[j]){

        case 1:
        a++;
        break;

        case 2:
        b++;
        break;

        case 3:
        c++;
        break;

        case 4:
        d++;
        break;

        case 5:
        e++;
        break;

        }
    }

    k[0] = a;
    k[1] = b;
    k[2] = c;
    k[3] = d;
    k[4] = e;

    printf("Calificacion \t Personas \n");

    for(j = 0; j < 5;j++)
    {
        printf("%d \t %d \n",j+1,k[j]);
    }

    return 0;
}



Saludos, feliz navidad!

engel lex

El or es el último operador a evaluarse allí... así que primero ejecuta !=

Para el código simplemente compras 1 con n, el resto al no ser 0, son directamente true... tienes que comparar n con cada valor
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Naimaderis

Cita de: engel lex en 25 Diciembre 2016, 07:59 AM
El or es el último operador a evaluarse allí... así que primero ejecuta !=

Para el código simplemente compras 1 con n, el resto al no ser 0, son directamente true... tienes que comparar n con cada valor
Gracias, ahora entendi mejor lo que estaba haciendo mal. Comparando n con cada valor como dijiste, se resuelve. Gracias
while (n[j] != 1 && n[j] != 2 && n[j] != 3 && n[j] != 4 && n[j] != 5)

MAFUS

Esto es lo mismo que:
while(n[j] < 1 || n[j] > 5)