• Lunes 29 de Abril de 2024, 21:23

Autor Tema:  Error Iso C++  (Leído 7095 veces)

x1x1x1

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Error Iso C++
« en: Sábado 10 de Noviembre de 2007, 18:21 »
0
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

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error Iso C++
« Respuesta #1 en: Sábado 10 de Noviembre de 2007, 18:27 »
0
ISO C++ forbids comparison between pointer and integer.

20 es el integer evidentemente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

logicaemp

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Error Iso C++
« Respuesta #2 en: Sábado 10 de Noviembre de 2007, 20:44 »
0
Intenta crear un cast.
(int)mat[b1] > 20

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error Iso C++
« Respuesta #3 en: Sábado 10 de Noviembre de 2007, 21:00 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

anderson_santos

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Error Iso C++
« Respuesta #4 en: Sábado 10 de Noviembre de 2007, 21:05 »
0
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
Anderson Santos
Estudiante
andersantos0316@hotmail.com

logicaemp

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Error Iso C++
« Respuesta #5 en: Domingo 11 de Noviembre de 2007, 00:11 »
0
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,

logicaemp

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Error Iso C++
« Respuesta #6 en: Domingo 11 de Noviembre de 2007, 00:45 »
0
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,

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error Iso C++
« Respuesta #7 en: Domingo 11 de Noviembre de 2007, 01:18 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

logicaemp

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Error Iso C++
« Respuesta #8 en: Domingo 11 de Noviembre de 2007, 02:02 »
0
Ok.  :D