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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  El programa dejó de funcionar al dar una respuesta? (RESUELTO)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: El programa dejó de funcionar al dar una respuesta? (RESUELTO)  (Leído 2,731 veces)
mcamara46

Desconectado Desconectado

Mensajes: 3



Ver Perfil
El programa dejó de funcionar al dar una respuesta? (RESUELTO)
« en: 27 Diciembre 2013, 22:06 pm »

Hola, este es mi primer post en este foro. Me dirijo a vosotros porque tengo un problema en un codigo muy sencillo de c++.

Código:
#include <iostream>

using namespace std;

int main()
{
    char* a;
    char* b = "Hola soy Maestro";
    cout << "Bienvenido, soy programa1, usted quien es?" << endl;
    cin >> a;//almaceno la respuesta del usuario
    if(a == b)
    {
         cout << "Hola maestro" << endl;    
    }
    else
    {
        cout << "Tu no quieres nada." << endl;
    }
    system("pause");
    return 0;
}

El problema real que tengo esque al  darle una respuesta deja de funcionar.

Quisiera saber cual es el problema, porque si quito los char* y lo substituyo por char y solo doy una sola letra si me admite el código y el programa funciona perfecto. Intuyo que el problema esta al comparar o en la misma seqüencia de caracteres char*.

Porfavor si alguien puede poner el resultado e indicarme cual ha sido mi error estaria muy agradecido.

Gracias de antemano :D


« Última modificación: 27 Diciembre 2013, 22:35 pm por mcamara46 » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: El programa dejó de funcionar al dar una respuesta?
« Respuesta #1 en: 27 Diciembre 2013, 22:12 pm »

Bueno, en primer lugar:

Código
  1. if(a == b)

Eso nunca será verdadero. Ahí estás comparando las DIRECCIONES de memoria que guardan las variables (punteros). Las direcciones nunca serán iguales.

En segundo lugar:

la variable 'a' es un puntero a una dirección. ¿Qué dirección? Ninguna, ya que no está inicializada. En cada inicialización del programa, 'a' puede tener un valor distinto. Por tanto, lo que dbees hacer es inicializarla.

No soy experto en C, soy más de C++, pero si no me equivoco, sería así:
Código
  1. char* a = malloc(sizeOf(char)*N); //N es el número de casillas que tendrá. Pon 100 por ejemplo, para asegurarte que no haya problemas

Bueno, creo que así debería ir.

EDITO: Perdona, pensaba que era C. Ahora vi el include iostream jeje

En C++, para guardar memoria, haz así:

Código
  1. char* a = new char[N]; /+/Donde N es el numero de celdas, caracteres en este caso.


« Última modificación: 27 Diciembre 2013, 22:16 pm por ivancea96 » En línea

mcamara46

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: El programa dejó de funcionar al dar una respuesta?
« Respuesta #2 en: 27 Diciembre 2013, 22:25 pm »

Bueno, en primer lugar:

Código
  1. if(a == b)

Eso nunca será verdadero. Ahí estás comparando las DIRECCIONES de memoria que guardan las variables (punteros). Las direcciones nunca serán iguales.

En segundo lugar:

la variable 'a' es un puntero a una dirección. ¿Qué dirección? Ninguna, ya que no está inicializada. En cada inicialización del programa, 'a' puede tener un valor distinto. Por tanto, lo que dbees hacer es inicializarla.

No soy experto en C, soy más de C++, pero si no me equivoco, sería así:
Código
  1. char* a = malloc(sizeOf(char)*N); //N es el número de casillas que tendrá. Pon 100 por ejemplo, para asegurarte que no haya problemas

Bueno, creo que así debería ir.

EDITO: Perdona, pensaba que era C. Ahora vi el include iostream jeje

En C++, para guardar memoria, haz así:

Código
  1. char* a = new char[N]; /+/Donde N es el numero de celdas, caracteres en este caso.

Muchas gracias, ahora ya no se cierra, pero si miras el código, lo que pretendo hacer es que se comparen dos frases, y que si son iguales le vaya a preguntar otra cosa, sino salte otra frase.
Ahora el problema que tengo esque salta el else ponga lo que ponga.

Código:
using namespace std;

int main()
{
    char* a = new char[100];
    char* b = "Hola soy Maestro";
    cout << "Bienvenido, soy programa1, usted quien es?" << endl;
    cin >> a;//almaceno la respuesta del usuario
    if(a == b)
    {
         cout << "Hola maestro" << endl;   
    }
    else
    {
        cout << "Tu no quieres nada." << endl;
    }
    system("pause");
    return 0;
}
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: El programa dejó de funcionar al dar una respuesta?
« Respuesta #3 en: 27 Diciembre 2013, 22:29 pm »

Bueno, en primer lugar:

Código
  1. if(a == b)

Eso nunca será verdadero. Ahí estás comparando las DIRECCIONES de memoria que guardan las variables (punteros). Las direcciones nunca serán iguales.

Como dije antes xD así solo comparas las direcciones. Tú debes comparar letra a letra (con un for, por ejemplo) cada una, y ver si son iguales. También puedes usar la librería string, pero eso ya como veas.
En línea

mcamara46

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: El programa dejó de funcionar al dar una respuesta? (RESUELTO)
« Respuesta #4 en: 27 Diciembre 2013, 22:35 pm »

Gracias, mirare como usar la libreria :D
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: El programa dejó de funcionar al dar una respuesta? (RESUELTO)
« Respuesta #5 en: 27 Diciembre 2013, 23:50 pm »

Gracias, mirare como usar la libreria :D

Otra forma es usar el tipo string que permite cosas como:

Código
  1. if(a == b)
  2.  

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.    string b;
  8.    string a ="leosan san";
  9.    cout << "Bienvenido, soy programa1, usted quien es?" << endl;
  10.    getline (cin,b) ;//permite espacios en blanco a diferencia de cin
  11.    if(a == b)
  12.        cout << "Hola maestro  " << a <<endl;
  13.    else
  14.        cout << "Tu no quieres nada." << endl;
  15.    system("pause");
  16.    return 0;
  17. }
  18.  

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda - Dejo de funcionar mi proyecto :S
.NET (C#, VB.NET, ASP)
Edu 3 3,319 Último mensaje 25 Enero 2011, 16:51 pm
por Edu
Impresora dejó de funcionar.
Hardware
Devill 8 5,476 Último mensaje 2 Julio 2012, 23:12 pm
por simorg
El programa.exe dejo de funcionar
Programación C/C++
angel1397 3 2,672 Último mensaje 21 Noviembre 2016, 20:34 pm
por MAFUS
Cuadro en negro y error programa dejó de funcionar :C
Programación C/C++
danids15 1 2,519 Último mensaje 1 Julio 2017, 12:41 pm
por migueluc
Dejo funcionar conexion a internet en Linux
Wireless en Linux
iznogud2 1 11,443 Último mensaje 8 Diciembre 2023, 16:51 pm
por .xAk.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines