SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: x1x1x1 en Sábado 10 de Noviembre de 2007, 18:21

Título: Error Iso C++
Publicado por: x1x1x1 en Sábado 10 de Noviembre de 2007, 18:21
al compilar el archivo me sale un error en la validacion agradeceria si pudieran ayudarme gracias decirme como solucionar este problema
  do {
                                printf("Ingrese su nota de la materia #%d",b1);
                                scanf("%i",&mat[b1]);
                                if (mat[b1]>20 ){
                               
                                printf ("Error");
                                }
                                }while (mat[b1]>20 );
me sale este error en la line del if y del while ISO C++ forbids comparison between pointer and integer
por favor agradeceria su pronta ayuda
Título: Re: Error Iso C++
Publicado por: Eternal Idol en Sábado 10 de Noviembre de 2007, 18:27
ISO C++ forbids comparison between pointer and integer.

20 es el integer evidentemente.
Título: Re: Error Iso C++
Publicado por: logicaemp en Sábado 10 de Noviembre de 2007, 20:44
Intenta crear un cast.
(int)mat[b1] > 20
Título: Re: Error Iso C++
Publicado por: Eternal Idol en Sábado 10 de Noviembre de 2007, 21:00
Cita de: "logicaemp"
Intenta crear un cast.
(int)mat[b1] > 20
¿Tiene sentido comparar un puntero con 20? A menos que sea 0 siempre va a ser mayor a 20, debe ser un error de logica y hacer un casting para forzar la comparacion no lo solucionaria.
Título: Re: Error Iso C++
Publicado por: anderson_santos en Sábado 10 de Noviembre de 2007, 21:05
Holaa...

Pues pienso que estas colocando mal los valores trata de cambiar el if y el While en el condicional no puedes comparar un vector o un arreglo que maneja posiciones de memoria con un numero entero debes comparalos iguales

if (mat[b1]>mat[c1])
o if (a>20) porque? porque en la variable a estas almacenando un numero entero no varios como sucede en vectores o arreglos

lo mismo en el while es un ejemplo no se que valores estes trajando

Anderson..^_^
andersantos0316@yahoo.es (http://mailto:andersantos0316@yahoo.es)
Título: Re: Error Iso C++
Publicado por: logicaemp en Domingo 11 de Noviembre de 2007, 00:11
Espero no molestar a nadie con el siguiente comentario:

Normalmente cuando posteo una respuesta, lleva consigo un
enunciado claro y preciso, basado en una prueba que realizo
con anterioridad, en muchos foros he visto que no prueban
sus respuestas, y a veces esta equivocada.


Es decir, utilicé Linux Debian, Anjuta, gcc, g++ con el
FLAG -ansi / -std=iso9899:199409 / -std=iso9899:1999,
pero no pude reproducir el error con el programa que se
posteó inicialmente.

A continuación expongo el código con breves explicaciones:
Citar
¿Tiene sentido comparar un puntero con 20? A menos que sea 0 siempre va a ser mayor a 20, debe ser un error de logica y hacer un casting para forzar la comparacion no lo solucionaria.
No es un puntero, es "&".


Este esa el código que posteó "x1x1x1" y funciona perfectamente:
Código: Text
  1.  
  2. #include <iostream>
  3. int main()
  4. {
  5.   int b1 = 0;
  6.   int mat[] = {1, 2, 3};
  7.  
  8.   do {
  9.     printf("Ingrese su nota de la materia #%d : ", b1);
  10.     scanf("%i", &mat[b1]);
  11.     if (mat[b1] > 20){
  12.       printf("Error\n");
  13.     }
  14.   } while (mat[b1] > 20);
  15.  
  16.   std::cout << "Hello world" << std::endl;
  17.   return 0;
  18. }
  19.  
  20.  

Este es el código que NO se posteo y fué la única forma que pude reproducir el error.
Código: Text
  1.  
  2. #include <iostream>
  3. int main()
  4. {
  5.   int b1 = 0;
  6.   int mat[] = {1, 2, 3};
  7.  
  8.   do {
  9.     printf("Ingrese su nota de la materia #%d : ", b1);
  10.     scanf("%i", &mat[b1]);
  11.     if (&mat[b1] > 20){  /* <--------------------------- &  */
  12.       printf("Error\n");
  13.     }
  14.   } while (&mat[b1] > 20);     /* <--------------------------- &  */
  15.  
  16.   std::cout << "Hello world" << std::endl;
  17.   return 0;
  18. }
  19.  
  20.  
main.cc:14:error:ISO C++ forbids comparison between pointer and integer
main.cc:17:error:ISO C++ forbids comparison between pointer and integer


Este es el código que recomiendo, aunque estaba previamente claro,
puesto que el error no se presentaba en el código inicial.
Código: Text
  1.  
  2. #include <iostream>
  3. int main()
  4. {
  5.   int b1 = 0;
  6.   int mat[] = {1, 2, 3};
  7.  
  8.   do {
  9.     printf("Ingrese su nota de la materia #%d : ", b1);
  10.     scanf("%i", &mat[b1]);
  11.     if ((int)mat[b1] > 20) { /* <--------------------------- (int)  */
  12.       printf("Error\n");
  13.     }
  14.   } while ((int)mat[b1] > 20); /* <--------------------------- (int)  */
  15.  
  16.   std::cout << "Hello world" << std::endl;
  17.   return 0;
  18. }
  19.  
  20.  

Hice varias pruebas ingresando datos y funciona correctamente,
el tuyo inicialmente, así como el mío que hacen lo mismo.

Suerte,
Título: Re: Error Iso C++
Publicado por: logicaemp en Domingo 11 de Noviembre de 2007, 00:45
Perdón por mi insistencia en el mismo tema pero
aún este código funciona correctamente, si ese
fuera el camino que hubiera seleccionado para
crear las variables con punteros.

Código: Text
  1.  
  2. /* Created by Anjuta version 1.2.4a */
  3. /*  This file will not be overwritten */
  4.  
  5. #include <iostream>
  6.  
  7. int main()
  8. {
  9.   int b1 = 0;
  10.   int* mat;
  11.  
  12.   mat = (int *)malloc(sizeof(int) * 3);
  13.   do {
  14.     printf("Ingrese su nota de la materia #%d : ", b1);
  15.     scanf("%i", &mat[b1]);
  16.     if (mat[b1] > 20){
  17.       printf("Error\n");
  18.     }
  19.   } while (mat[b1] > 20);
  20.  
  21.   std::cout << "Hello world" << mat[b1] << std::endl;
  22.   free(mat);
  23.  
  24.   return 0;
  25. }
  26.  
  27.  

Suerte,
Título: Re: Error Iso C++
Publicado por: Eternal Idol en Domingo 11 de Noviembre de 2007, 01:18
Cita de: "logicaemp"
Normalmente cuando posteo una respuesta, lleva consigo un
enunciado claro y preciso, basado en una prueba que realizo
con anterioridad, en muchos foros he visto que no prueban
sus respuestas, y a veces esta equivocada.

Es evidente que no fue el caso, ademas de ser una respuesta equivocada no habia ninguna explicacion.

Cita de: "logicaemp"
No es un puntero, es "&".

Genial, el punto seria como podes saber eso ... de cualquier manera es IRRELEVANTE, se le esta pasando una direccion de memoria y eso es de lo que es queja el compilador. Por lo tanto si fuera correcto lo que decis es un problema de logica del programa y un casting no soluciona absolutamente NADA.

Cita de: "logicaemp"
Este esa el código que posteó "x1x1x1" y funciona perfectamente:

¿Es una broma? Eso lo habra publicado en otro foro, aca no esta ese codigo.

Cita de: "logicaemp"
Este es el código que NO se posteo y fué la única forma que pude reproducir el error.

Practicamente todo ese codigo te lo inventaste ...

Esto es redundante teniendo en cuenta TU codigo:
if ((int)mat[b1] > 20) { /* <--------------------------- (int)  */

Cita de: "logicaemp"
Este es el código que recomiendo, aunque estaba previamente claro,
puesto que el error no se presentaba en el código inicial.

Entonces tu primera respuesta pasa a ser estupida. ¿No hay error? ¿Entonces para que hay que hacer un casting? Por favor!

Cita de: "logicaemp"
Perdón por mi insistencia en el mismo tema pero
aún este código funciona correctamente, si ese
fuera el camino que hubiera seleccionado para
crear las variables con punteros.

Reservar tres int's para usar solo uno es muy correcto ...

Te recomiendo que esperes a que el usuario que publico la pregunta haga la aclaracion pertinente sobre su codigo. Si no tenia ningun error de compilacion tu solucion de usar un casting es inutil y si estaba usando el & sin necesidad lo sigue siendo.
Título: Re: Error Iso C++
Publicado por: logicaemp en Domingo 11 de Noviembre de 2007, 02:02
Ok.  :D