elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error raro en la compilación de este sencillo código.
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 3 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: Error raro en la compilación de este sencillo código.  (Leído 26,720 veces)
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Error raro en la compilación de este sencillo código.
« en: 7 Junio 2013, 17:25 pm »

A ver si me podéis echar una mano con este código.
Lo que quiero es que ejecute una acción si las letras introducidas por teclado (qw) coinciden con las especificadas en el if.

Podría hacer un arreglo de 3 caracteres que almacenara "qw" y compararlo con "palabra" pero voy a incluir muchísimas combinaciones de letras y tendría que declarar muchísimos arreglos, con este código me ahorraría cientos de lineas y el código sería más legible pero en la linea del "if" me da el error:
Citar
ISO C++ forbids comparison between pointer and integer

También me salta un warning pero, ¿creo que solo me avisa de que estoy comparando una variable con una constante no?
Citar
multi-character character constant
 

Código
  1. #include <iostream>
  2. char palabra[20];      
  3. int main() {            
  4. std::cout << "introduce letras";    
  5. std::cin >> palabra;
  6. if (palabra == 'qw')
  7. {std::cout <<"\nHola mundo";}
  8. getchar();            
  9. getchar();            
  10. return 0;}


Aquí el código comentado:
Código
  1. #include <iostream> //Incluir biblioteca entrada salida.
  2. char palabra[20];      //Cadena de caracteres global.
  3. int main() {             //Funcion principal.
  4. std::cout << "introduce letras";    //Muestra el texto.
  5. std::cin >> palabra;//Recoge texto del teclado y se lo asigna a "palabra".
  6. if (palabra == 'qw') //Si se introdujo por teclado "qw"
  7. {std::cout <<"\nHola mundo";}  //muestra el texto.
  8. getchar();            //No cierra hasta que se pulse enter.
  9. getchar();               //No cierra hasta que se pulse enter.
  10. return 0;}                   //Devuelve 0 a la funcion.

PD: Poniéndolo así soluciono el warning:
Código
  1. if (palabra[20] == "qw")
Pero me sigue dando el mismo error.


« Última modificación: 7 Junio 2013, 17:39 pm por OmarHack » En línea

I like to test things.
pacoperico

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #1 en: 7 Junio 2013, 17:30 pm »

En tu codigo palabra no es una variable sino una constante apuntador es decir, el nombre de un arreglo es un puntero de tipo constante y que apunta al primer elemento del arreglo, palabra es lo mismo que &palabra[0].

El arreglo palabra[] declaralo como de tipo string a ver que tal.


« Última modificación: 7 Junio 2013, 17:41 pm por pacoperico » En línea

pacoperico

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #2 en: 7 Junio 2013, 17:43 pm »

PD: Poniéndolo así soluciono el warning:
Código
  1. if (palabra[20] == "qw")
Pero me sigue dando el mismo error.

No estas comparando el arreglo palabra[] con "qw", estas comparando el elemento numero 20 del arreglo palabra[] con "qw"


Código
  1. #include <iostream>
  2. #include <string>
  3. std::string palabra;      
  4. int main() {            
  5. std::cout << "introduce letras";    
  6. std::cin >> palabra;
  7. if (palabra == "qw")
  8. {std::cout <<"\nHola mundo";}
  9. getchar();            
  10. getchar();            
  11. return 0;
  12. }
  13.  
« Última modificación: 7 Junio 2013, 17:52 pm por pacoperico » En línea

CCross

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #3 en: 7 Junio 2013, 17:51 pm »

El error se debe a que estas intentando comparar un puntero con un entro y esto esta
prohibido lo mejor para estos casos es usar la funcion strcmp quedaria asi:

Código
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. int main() {
  5.    char palabra[20]= {0};
  6.  
  7.    std::cout << "introduce letras: ";
  8.    std::cin >> palabra;
  9.  
  10.    if(strcmp(palabra, "qw")==0)
  11.    std::cout <<"\nHola mundo";
  12.    std::cin.get();
  13.  
  14.    return 0;}
  15.  

Saludos  ;D
« Última modificación: 7 Junio 2013, 18:07 pm por CCross » En línea

OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #4 en: 7 Junio 2013, 18:00 pm »

El error se debe a que estas intentando comparar un puntero con un entro y esto esta
prohibido lo mejor para estos casos es usar la funcion strcmp quedaria asi:

Código
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. int main() {
  5.    char palabra[20]= {0};
  6.  
  7.    std::cout << "introduce letras: ";
  8.    std::cin >> palabra;
  9.  
  10.    if(strcmp(palabra, "qw"))
  11.    std::cout <<"\nHola mundo";
  12.    std::cin.get();
  13.  
  14.    return 0;}
  15.  

Saludos  ;D
Gracias!
Hace justo lo contrario, si pongo por teclado qw no sale el texto, y si pongo otra cosa cualquiera si sale. ¿Cómo lo soluciono? Voy a mirar el uso de esa librería a ver que hace xD.
En línea

I like to test things.
maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #5 en: 7 Junio 2013, 18:04 pm »

Si estas usando c++, por que no usas string?


Código
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. int main() {
  5. string palabra;
  6. cout << "introduce letras";
  7. cin >> palabra;
  8. if (palabra == "qw")
  9. {
  10.    cout <<"\nHola mundo";
  11. }
  12. return 0;
  13. }
  14.  





« Última modificación: 7 Junio 2013, 18:05 pm por maxim_o » En línea

CCross

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #6 en: 7 Junio 2013, 18:06 pm »

Hace justo lo contrario, si pongo por teclado qw no sale el texto, y si pongo otra cosa cualquiera si sale. ¿Cómo lo soluciono?
Disculpame se me escapo un detallito he editado el codigo de arriba ahora funciona
Saludos  ;)
« Última modificación: 7 Junio 2013, 18:08 pm por CCross » En línea

OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #7 en: 7 Junio 2013, 18:19 pm »

Disculpame se me escapo un detallito he editado el codigo de arriba ahora funciona

Saludos  ;)
Muchas gracias! Ya lo arreglara yo también así:
Código
  1. if(strcmp(palabra, "qw") == 0)
  2.    {std::cout <<"\nHola mundo";}
  3.  
:)

Si estas usando c++, por que no usas string?


Código
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. int main() {
  5. string palabra;
  6. cout << "introduce letras";
  7. cin >> palabra;
  8. if (palabra == "qw")
  9. {
  10.    cout <<"\nHola mundo";
  11. }
  12. return 0;
  13. }
  14.  

¿Tan fácil? Pues no lo conocía, no hace mucho que uso cadenas de carácteres y en los dos cursos que estoy viendo (en c++) usaban "char palabra[20]"
¿Si quiero comparar por ejemplo la 3 letra de una cadena con la 4 de otra tengo que usar un for no? ¿O puedo hacerlo de alguna manera similar a esta: "palabra[2]"?

Muchas gracias a todos :)

En línea

I like to test things.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #8 en: 7 Junio 2013, 18:29 pm »

¿O puedo hacerlo de alguna manera similar a esta: "palabra[2]"?
Puedes usar el operador [] sin problemas

Un ejemplo de uso de strings:

Código
  1. string Texto = "Cosita Linda";
  2.  
  3. Texto = "ABCDEFGHIJKLMNOPQRTST"; //Operador de asignacion, funciona incluso aunque la cadena sea mas grande que la anterior
  4.  
  5. Texto += "Otra cadena"; // Operador + para concatenar cadenas
  6.  
  7. cout<<Texto.size(); // La funcion size te indica el tamanyo de la cadena
  8.  
  9. if (Texto == "Esto") // Operador ==
  10.  
  11. cout<<Texto[0]; // Obtienes el primer caracter
  12. cout<<Texto[1]; // obtienes el segundo caracter
  13.  
  14. //...
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #9 en: 7 Junio 2013, 18:33 pm »

Código
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int main(){
  6.  
  7. string palabra;
  8. cout<< "Dame dos letras";
  9. cin>>palabra;
  10.  
  11. cout<<palabra[0]; // primera letra
  12. cout << palabra[1]; //primera letra
  13. cout<<palabra.length(); //tamaño total
  14. }

Se puede usar sin problemas igual....

Edito: Vale ya te lo habían resuelto.
Saludos
« Última modificación: 7 Junio 2013, 18:35 pm por maxim_o » En línea

Páginas: [1] 2 3 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda a resolver este error de compilacion por favor!
Programación C/C++
carles24 2 3,535 Último mensaje 20 Noviembre 2011, 16:22 pm
por satu
Error de compilación en Dev C++ raro
Programación C/C++
Kasswed 9 5,253 Último mensaje 8 Mayo 2012, 00:34 am
por n0z
un codigo para este programa sencillo
Programación General
etaccracker 2 2,505 Último mensaje 29 Marzo 2013, 16:04 pm
por crazykenny
Programa sencillo: ¿Qué significa este error?
Programación C/C++
noob2012 4 4,042 Último mensaje 28 Mayo 2013, 21:41 pm
por elkiy
Qué error tiene este sencillo código? (html - php) « 1 2 »
Desarrollo Web
Danyel_Casvill 13 6,031 Último mensaje 24 Junio 2014, 22:07 pm
por Graphixx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines