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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19
111  Foros Generales / Foro Libre / Re: Una Imagen Vale Mas Que Mil Palabras. en: 12 Septiembre 2011, 15:07 pm
Opino lo mismo, ha plasmado a la perfección la sociedad actual, lástima que se quede en una simple viñeta, no llega el cambio en este mundo...

+1 buen aporte.
112  Programación / Programación C/C++ / Re: Calculadora en Win API no imprime el resultado en: 12 Septiembre 2011, 11:49 am
Yo lo probe en Windows 7 asi que no te sabria decir pero igual siempre tenes que usar la version de Release para distribuir.

Vaya, me ha funcionado con la versión Release, aunque no entiendo por qué si en principio va el mismo code que en Debug.

Gracias de nuevo. Saludos.
113  Programación / Programación C/C++ / Re: Calculadora en Win API no imprime el resultado en: 12 Septiembre 2011, 10:47 am
Aprovecho el mismo tema para preguntar otra cosilla:

Como he comentado uso Code::Blocks para compilar, y dentro del proyecto (en la carpeta bin/debug) me deja el exe de la aplicación. El caso es que he pasado este exe a otro PC con Windows 7 (el PC con el que he compilado la aplicación lleva Windows XP), cuando le doy doble clic se ejecuta, pero faltan algunos botones y no realiza las operaciones.

Supongo que será algo sobre la compatibilidad pero el code solo lleva C++ con Win API con lo cual debería funcionar en cualquier SO de Microsoft. Otra cosa que se me ha ocurrido es que en el exe no vayan incluidas las librerías, entonces si en el otro PC no tengo dichas librerías no va a funcionar (¿cuál sería la solución en este caso?, la idea es que vaya bien en cualquier PC sin necesidad de instalar el compilador con las librerías).

Pero bueno solo son suposiciones mias, a ver si alguien puede aclararme a qué se debe que si me vaya en un Windows XP (el que he usado para compilar) y no en un Windows 7 (no lleva ningún IDE o compilador).

Gracias por adelantado. Saludos.
114  Programación / Programación C/C++ / Re: [Pregunta][Porgramacion] Programación C/C++ en: 12 Septiembre 2011, 10:15 am
Buenas:

Para explicarte mejor deberías postear lo que hayas hecho (aunque esté mal) y preguntar sobre ese ejemplo, o al menos crear las variables y punteros y preguntar sobre ellos, pero si te los vas inventando conforme vas escribiendo el que lee no se entera bien de a qué te refieres.

Te he hecho un ejemplo que plantea lo que has preguntado, a ver si asi entiendes cómo hacerlo:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.    int x = 1, y = 14;
  7.  
  8.    //punteros
  9.    int *puntx = &x;   //El puntero "puntx" apunta a la direccion de la variable "x"
  10.    int *punty = &y;   //El puntero "punty" apunta a la direccion de la variable "y"
  11.  
  12.    //comprobaciones
  13.    cout << "Pedimos el valor de X desde la variable: " << x << endl;
  14.    cout << "Pedimos el valor de Y desde la variable: " << y << endl;
  15.    cout << "Pedimos el valor de X desde el puntero: " << *puntx << endl;
  16.    cout << "Pedimos el valor de Y desde el puntero: " << *punty << endl;
  17.  
  18.    //modificamos el valor de "x" e "y" desde los punteros
  19.    *puntx = 10;
  20.    *punty = 15;
  21.  
  22.    //comprobaciones
  23.    cout << endl << endl;
  24.    cout << "Pedimos el valor de X desde la variable: " << x << endl;
  25.    cout << "Pedimos el valor de Y desde la variable: " << y << endl;
  26.    cout << "Pedimos el valor de X desde el puntero: " << *puntx << endl;
  27.    cout << "Pedimos el valor de Y desde el puntero: " << *punty << endl;
  28.  
  29.    //hacemos que "x" valga lo mismo que "y" desde los punteros
  30.    *puntx = *punty;
  31.  
  32.    //comprobaciones
  33.    cout << endl << endl;
  34.    cout << "Pedimos el valor de X desde la variable: " << x << endl;
  35.    cout << "Pedimos el valor de X desde el puntero: " << *puntx << endl;
  36.  
  37.    cout << endl << endl;
  38.    cout << "El puntero puntx apunta a la direccion: " << puntx << endl;
  39.    cout << "El puntero punty apunta a la direccion: " << punty << endl;
  40.  
  41.    //hacemos que el puntero "puntx" apunte a la misma direccion que el puntero "punty"
  42.    puntx = punty;
  43.  
  44.    //comprobaciones
  45.    cout << endl << endl;
  46.    cout << "El puntero puntx apunta a la direccion: " << puntx << endl;
  47.    cout << "El puntero punty apunta a la direccion: " << punty << endl;
  48.  
  49.    cin.get();
  50.    return 0;
  51. }
  52.  

Va comentado, cualquier cosa pregunta. Saludos.
115  Programación / Programación C/C++ / Re: Programando un Craps en C... en: 11 Septiembre 2011, 23:17 pm
Gracias!!!!!!!!!!!!! en verdad, oie una ultima pregunta el "goto" porque lo puedo cambiar?? porque no me dejan usarlo....

Vale, lo puse intentando hacer el código lo más sencillo posible y evitar que te liaras, pero tienen toda la razón con no permitirte usar "goto", está totalmente desaconsejado. Para tener el mismo efecto debes crear un bucle (while o for) y cuando quieras que finalice el bucle cambias el valor de la condición; tienes un ejemplo muy claro en el mismo código:

Código
  1. while (opcion != 10)
  2.    {
  3.     ...
  4.     case 3:
  5.                {
  6.                opcion = 10;
  7.                break;
  8.                }
  9.    }

Ahi por ejemplo, en el caso de que el usuario ingrese "3" (finalizar la partida) el valor de "opcion" pasa a ser "10" y por tanto deja de cumplirse la condición del bucle que es: while (opcion != 10), es decir, "Siempre que opcion no valga 10".
116  Programación / Programación C/C++ / Re: Programando un Craps en C... en: 11 Septiembre 2011, 23:01 pm
Aqui te lo dejo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int dados (void);
  5.  
  6. int main ()
  7. {
  8.    int estadojuego, mispuntos, puntosbanca, apuesta, opcion;
  9.    printf ("---------\n| Craps |\n---------\n\n\n");
  10.    while (opcion != 10)
  11.    {
  12.  
  13.    mispuntos = 1000;
  14.    puntosbanca = 20000;
  15.  
  16.    printf ("La apuesta minima es de 5 dolares. ¿Cuanto quieres apostar?: ");
  17.    scanf ("%d", &apuesta);
  18.  
  19.    etiqueta:
  20.    estadojuego = dados ();
  21.  
  22.    switch (estadojuego)
  23.    {
  24.           case 1:
  25.                {
  26.                printf ("\nHas ganado.");
  27.                mispuntos += apuesta;
  28.                puntosbanca -= apuesta;
  29.                printf ("\nTus puntos actuales son %d", mispuntos);
  30.                break;
  31.                }
  32.           case 2:
  33.                {
  34.                printf ("\nHas perdido.\n");
  35.                mispuntos -= apuesta;
  36.                puntosbanca -= apuesta;
  37.                printf ("\nTus puntos actuales son %d ", mispuntos);
  38.                break;
  39.                }
  40.           case 0:
  41.                {
  42.                printf ("\nNo gana nadie.");
  43.                break;
  44.                }
  45.    }
  46.  
  47.    printf ("\n1.- Apostar el triple.\n2.- Empezar nueva partida.\n3.- Finalizar partida.\n\nElija su opcion: ");
  48.    scanf ("%d", &opcion);
  49.    switch (opcion)
  50.    {
  51.           case 1:
  52.                {
  53.                apuesta *= 3;
  54.                goto etiqueta;
  55.                break;
  56.                }
  57.           case 2:
  58.                {
  59.                break;
  60.                }
  61.           case 3:
  62.                {
  63.                opcion = 10;
  64.                break;
  65.                }
  66.    }
  67.  
  68.    }
  69.    return 0;
  70. }
  71.  
  72. int dados(void)
  73. {
  74.    unsigned short int dado1, dado2, tirada, estadojuego;
  75.    dado1 = 1 + (rand()%6);
  76.    dado2 = 1 + (rand()%6);
  77.    tirada = dado1 + dado2;
  78.    printf("Lanzamiento de los dados %d + %d = %d\n", dado1, dado2, tirada);
  79.    switch(tirada)
  80.      {
  81.                  case 7:
  82.                       {
  83.                       estadojuego = 1;
  84.                       break;
  85.                       }
  86.                  case 11:
  87.                       {
  88.                       estadojuego = 1;
  89.                       break;
  90.                       }
  91.                  case 2:
  92.                       {
  93.                       estadojuego = 2;
  94.                       break;
  95.                       }
  96.                  case 3:
  97.                       {
  98.                       estadojuego = 2;
  99.                       break;
  100.                       }
  101.                  case 12:
  102.                       {
  103.                       estadojuego = 2;
  104.                       break;
  105.                       }
  106.                  default:
  107.                       {
  108.                       estadojuego = 0;
  109.                       break;
  110.                       }
  111.      }
  112.    return estadojuego;
  113. }
  114.  

Unas cosas con las que alomejor te lias:

-Se le asigna el valor de 1000 a "mispuntos" porque es con lo que empieza el usuario mientras que la banca comienza con 20000.
-Cuando el jugador elige finalizar la partida se cambia el valor de "opcion" a 10, lo cual hace que ya no se cumpla la condición del while (opcion != 10), asi que acaba el programa.
-Cuando elige la opción "Apostar el triple" se va a "etiqueta" para que el bucle no comience desde el principio con lo cual conseguimos que se mantengan los puntos obtenidos hasta ahora. La función "goto" está desaconsejada, pero la he usado para hacer el code sencillo y no liarte con bucles anidados.
-También falta implementar un par de condiciones para que cuando el jugador llegue a 0 puntos se acabe la partida (ya que no puede apostar más), pero viendo que eso no venía incluido en tu primer code dejaré que lo hagas por ti mismo.

Cualquier duda que tengas pregunta. Saludos.
117  Programación / Programación C/C++ / Re: Programando un Craps en C... en: 11 Septiembre 2011, 21:50 pm
Se hace difícil entender el code si no respetas espacios y cambios de línea, debes separar partes del código que se refieran a diferentes cosas.

El problema de que no te diga si has ganado o has perdido es porque no llamas a esa parte en todos los casos, lo que debes hacer es crear una función que te pida las diferentes opciones (apostar el triple, retirarse, etc.) y según la respuesta del usuario que efectúe una acción u otra, y que el único valor que retorne dicha función sea el de los puntos ganados o perdidos.

Te retocaré ese par de puntos en el code para que veas como sería, ahora un rato me pongo y lo posteo.
118  Programación / Programación C/C++ / Re: Programando un Craps en C... en: 11 Septiembre 2011, 20:33 pm
Deberías postear el nuevo code con las modificaciones que le hayas hecho, asi sabremos dónde falla.
119  Programación / Programación C/C++ / Re: Calculadora en Win API no imprime el resultado en: 11 Septiembre 2011, 19:23 pm
El propio VC++ te indica el problema al compilar:
.cpp(248) : warning C4700: uninitialized local variable 'operacion' used
.cpp(248) : warning C4700: uninitialized local variable 'primer_num' used


Esas variables son LOCALES a la funcion WindowProcedure, es decir que su ambito es la ejecucion de la funcion, cada vez que se ejecute se inicializara con un valor indeterminado y este se perdera al terminar la funcion.

Podes agregarle static antes de las variables o sacarlas fuera de la funcion, asi su ambito se convierte en global.

Correcto, ya va a la perfección, en Code::Blocks no me avisa del fallo pero estás en lo cierto. Corrijo el code del primer post por si le sirve a alguien.

Gracias por tu tiempo. Saludos.
120  Programación / Programación C/C++ / Calculadora en Win API no imprime el resultado en: 11 Septiembre 2011, 18:33 pm
Buenas, en mis avances con la API de windows he conseguido hacer una calculadora muy básica con interfaz, sin embargo no me imprime el resultado, asi que después de varios días dándole vueltas y de habérselo planteado a un par de conocidos que no han encontrado el fallo lo posteo aqui:

Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. //ID´s
  6. enum {ID_LABEL, ID_EDIT, ID_BOTONIGUAL, ID_BOTONSUMAR, ID_BOTONRESTAR, ID_BOTONMULTIPLICAR, ID_BOTONDIVIDIR, ID_BOTONCOMA, ID_BOTONSIGNO, ID_BOTONCERO, ID_BOTON1, ID_BOTON2, ID_BOTON3, ID_BOTON4, ID_BOTON5, ID_BOTON6, ID_BOTON7, ID_BOTON8, ID_BOTON9};
  7.  
  8.  
  9. //Prototipos
  10. LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
  11.  
  12. void imprimirEdit (int i);                                                  //Funcion que concatena los numeros al hacer clic en los botones
  13. double calcular (double primer_num, double segundo_num, int operacion);     //Funcion que realiza las operaciones
  14.  
  15. HINSTANCE estancia;
  16. HWND label;
  17. HWND edit;
  18. //Botones->Numeros
  19. HWND boton1;
  20. HWND boton2;
  21. HWND boton3;
  22. HWND boton4;
  23. HWND boton5;
  24. HWND boton6;
  25. HWND boton7;
  26. HWND boton8;
  27. HWND boton9;
  28. HWND boton0;
  29. HWND botonComa;
  30. HWND botonSigno;
  31. //Botones->Operadores
  32. HWND botonIgual;
  33. HWND botonSumar;
  34. HWND botonRestar;
  35. HWND botonMultiplicar;
  36. HWND botonDividir;
  37.  
  38.  
  39.  
  40. /*  Make the class name into a global variable  */
  41. char szClassName[ ] = "CodeBlocksWindowsApp";
  42.  
  43. int WINAPI WinMain (HINSTANCE hThisInstance,
  44.                     HINSTANCE hPrevInstance,
  45.                     LPSTR lpszArgument,
  46.                     int nCmdShow)
  47. {
  48.    HWND hwnd;               /* This is the handle for our window */
  49.    MSG messages;            /* Here messages to the application are saved */
  50.    WNDCLASSEX wincl;        /* Data structure for the windowclass */
  51.  
  52.    estancia = hThisInstance;
  53.  
  54.    /* The Window structure */
  55.    wincl.hInstance = hThisInstance;
  56.    wincl.lpszClassName = szClassName;
  57.    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
  58.    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
  59.    wincl.cbSize = sizeof (WNDCLASSEX);
  60.  
  61.    /* Use default icon and mouse-pointer */
  62.    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  63.    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  64.    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
  65.    wincl.lpszMenuName = NULL;                 /* No menu */
  66.    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
  67.    wincl.cbWndExtra = 0;                      /* structure or the window instance */
  68.    /* Use Windows's default colour as the background of the window */
  69.    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
  70.  
  71.    /* Register the window class, and if it fails quit the program */
  72.    if (!RegisterClassEx (&wincl))
  73.        return 0;
  74.  
  75.    /* The class is registered, let's create the program*/
  76.    hwnd = CreateWindowEx (
  77.           0,                   /* Extended possibilites for variation */
  78.           szClassName,         /* Classname */
  79.           "Calculadora",       /* Title Text */
  80.           WS_OVERLAPPEDWINDOW, /* default window */
  81.           CW_USEDEFAULT,       /* Windows decides the position */
  82.           CW_USEDEFAULT,       /* where the window ends up on the screen */
  83.           544,                 /* The programs width */
  84.           375,                 /* and height in pixels */
  85.           HWND_DESKTOP,        /* The window is a child-window to desktop */
  86.           NULL,                /* No menu */
  87.           hThisInstance,       /* Program Instance handler */
  88.           NULL                 /* No Window Creation data */
  89.           );
  90.  
  91.    /* Make the window visible on the screen */
  92.    ShowWindow (hwnd, nCmdShow);
  93.  
  94.    /* Run the message loop. It will run until GetMessage() returns 0 */
  95.    while (GetMessage (&messages, NULL, 0, 0))
  96.    {
  97.        /* Translate virtual-key messages into character messages */
  98.        TranslateMessage(&messages);
  99.        /* Send message to WindowProcedure */
  100.        DispatchMessage(&messages);
  101.    }
  102.  
  103.    /* The program return-value is 0 - The value that PostQuitMessage() gave */
  104.    return messages.wParam;
  105. }
  106.  
  107.  
  108. /*  This function is called by the Windows function DispatchMessage()  */
  109.  
  110. LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  111. {
  112.    //Variables
  113.    char cadenaEditMain [35];
  114.    static int operacion;
  115.    static double primer_num, segundo_num, resultado;
  116.  
  117.    PAINTSTRUCT ps;
  118.    HDC hdc;
  119.  
  120.  
  121.    switch (message)
  122.    {
  123.        case WM_CREATE:
  124.        {
  125.            label = CreateWindow ("Static","Texto", WS_CHILD | WS_VISIBLE, 20, 20, 175, 25, hwnd, 0, estancia, 0);
  126.            edit = CreateWindowEx (WS_EX_CLIENTEDGE, "edit", 0, ES_RIGHT | ES_NUMBER | WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 50, 175, 25, hwnd, (HMENU)ID_EDIT, estancia, 0);
  127.  
  128.            boton1 = CreateWindow ("Button", "1", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 90, 40, 25, hwnd, (HMENU) ID_BOTON1, estancia, 0);
  129.            boton2 = CreateWindow ("Button", "2", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 90, 40, 25, hwnd, (HMENU) ID_BOTON2, estancia, 0);
  130.            boton3 = CreateWindow ("Button", "3", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 90, 40, 25, hwnd, (HMENU) ID_BOTON3, estancia, 0);
  131.            boton4 = CreateWindow ("Button", "4", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 120, 40, 25, hwnd, (HMENU) ID_BOTON4, estancia, 0);
  132.            boton5 = CreateWindow ("Button", "5", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 120, 40, 25, hwnd, (HMENU) ID_BOTON5, estancia, 0);
  133.            boton6 = CreateWindow ("Button", "6", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 120, 40, 25, hwnd, (HMENU) ID_BOTON6, estancia, 0);
  134.            boton7 = CreateWindow ("Button", "7", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 150, 40, 25, hwnd, (HMENU) ID_BOTON7, estancia, 0);
  135.            boton8 = CreateWindow ("Button", "8", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 150, 40, 25, hwnd, (HMENU) ID_BOTON8, estancia, 0);
  136.            boton9 = CreateWindow ("Button", "9", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 150, 40, 25, hwnd, (HMENU) ID_BOTON9, estancia, 0);
  137.            boton0 = CreateWindow ("Button", "0", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 180, 40, 25, hwnd, (HMENU) ID_BOTONCERO, estancia, 0);
  138.            botonComa = CreateWindow ("Button", ",", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 180, 40, 25, hwnd, (HMENU) ID_BOTONCOMA, estancia, 0);
  139.            botonSigno = CreateWindow ("Button", "+/-", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 180, 40, 25, hwnd, (HMENU) ID_BOTONSIGNO, estancia, 0);
  140.            botonSumar = CreateWindow ("Button", "+", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 165, 90, 40, 25, hwnd, (HMENU) ID_BOTONSUMAR, estancia, 0);
  141.            botonRestar = CreateWindow ("Button", "-", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 165, 120, 40, 25, hwnd, (HMENU) ID_BOTONRESTAR, estancia, 0);
  142.            botonMultiplicar = CreateWindow ("Button", "*", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 165, 150, 40, 25, hwnd, (HMENU) ID_BOTONMULTIPLICAR, estancia, 0);
  143.            botonDividir = CreateWindow ("Button", "/", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 165, 180, 40, 25, hwnd, (HMENU) ID_BOTONDIVIDIR, estancia, 0);
  144.            botonIgual = CreateWindow ("Button", "=", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 220, 40, 25, hwnd, (HMENU) ID_BOTONIGUAL, estancia, 0);
  145.        }
  146.  
  147.        case WM_PAINT:
  148.        {
  149.            hdc = BeginPaint(hwnd, &ps);
  150. EndPaint(hwnd, &ps);
  151. return 0;
  152.        }
  153.  
  154.        case WM_COMMAND:
  155.        {
  156.            switch (wParam)
  157.            {
  158.                case ID_BOTON1:                  //Al presionar el boton 1 se llama a la funcion "imprimirEdit" y se le envia el valor "1" que es lo que queremos que se concatene a lo que ya haya en el edit
  159.                {
  160.                    imprimirEdit (1);
  161.                    break;
  162.                }
  163.                case ID_BOTON2:
  164.                {
  165.                    imprimirEdit (2);
  166.                    break;
  167.                }
  168.                case ID_BOTON3:
  169.                {
  170.                    imprimirEdit (3);
  171.                    break;
  172.                }
  173.                case ID_BOTON4:
  174.                {
  175.                    imprimirEdit(4);
  176.                    break;
  177.                }
  178.                case ID_BOTON5:
  179.                {
  180.                    imprimirEdit(5);
  181.                    break;
  182.                }
  183.                case ID_BOTON6:
  184.                {
  185.                    imprimirEdit(6);
  186.                    break;
  187.                }
  188.                case ID_BOTON7:
  189.                {
  190.                    imprimirEdit(7);
  191.                    break;
  192.                }
  193.                case ID_BOTON8:
  194.                {
  195.                    imprimirEdit(8);
  196.                    break;
  197.                }
  198.                case ID_BOTON9:
  199.                {
  200.                    imprimirEdit(9);
  201.                    break;
  202.                }
  203.                case ID_BOTONCERO:
  204.                {
  205.                    imprimirEdit(0);
  206.                    break;
  207.                }
  208.                case ID_BOTONCOMA:
  209.                {
  210.                    break;
  211.                }
  212.                case ID_BOTONSUMAR:
  213.                {
  214.                    operacion = 1;                                    //Cambia el valor de "operacion" para indicar que se va a sumar
  215.                    GetWindowText (edit, cadenaEditMain, 34);         //Obtiene el numero ingresado en el edit
  216.                    primer_num = atof (cadenaEditMain);               //Transforma la cadena obtenida en un double y lo guarda en "primer_num"
  217.                    SetWindowText (edit, "");                         //Limpia el edit
  218.                    break;
  219.                }
  220.                case ID_BOTONRESTAR:
  221.                {
  222.                    operacion = 2;                                    //Cambia el valor de "operacion" para indicar que se va a restar
  223.                    GetWindowText (edit, cadenaEditMain, 34);
  224.                    primer_num = atof (cadenaEditMain);
  225.                    SetWindowText (edit, "");
  226.                    break;
  227.                }
  228.                case ID_BOTONMULTIPLICAR:
  229.                {
  230.                    operacion = 3;                                    //Cambia el valor de "operacion" para indicar que se va a multiplicar
  231.                    GetWindowText (edit, cadenaEditMain, 34);
  232.                    primer_num = atof (cadenaEditMain);
  233.                    SetWindowText (edit, "");
  234.                    break;
  235.                }
  236.                case ID_BOTONDIVIDIR:
  237.                {
  238.                    operacion = 4;                                    //Cambia el valor de "operacion" para indicar que se va a dividir
  239.                    GetWindowText (edit, cadenaEditMain, 34);
  240.                    primer_num = atof (cadenaEditMain);
  241.                    SetWindowText (edit, "");
  242.                    break;
  243.                }
  244.                case ID_BOTONIGUAL:
  245.                {
  246.                    GetWindowText (edit, cadenaEditMain, 34);         //Obtiene el numero ingresado en el edit
  247.                    segundo_num = atof (cadenaEditMain);              //Transforma la cadena obtenida en un double y lo guarda en "segundo_num"
  248.                    resultado = calcular (primer_num, segundo_num, operacion); //El resultado se obtiene apartir de la funcion "calcular", a esta funcion se le envian las variables "primer_num", "segundo_num" y "operacion"
  249.                    sprintf (cadenaEditMain, "%f", resultado);        //Se transforma el double obtenido en una cadena y se guarda en "cadenaEditMain"
  250.                    SetWindowText (edit, cadenaEditMain);             //Se imprime en el edit la cadena donde se encuentra el resultado
  251.                    break;
  252.                }
  253.  
  254.                break;
  255.            }
  256.            break;
  257.        }
  258.  
  259.        case WM_DESTROY:
  260.            PostQuitMessage (0);
  261.            break;
  262.        default:
  263.            return DefWindowProc (hwnd, message, wParam, lParam);
  264.    }
  265.  
  266.    return 0;
  267. }
  268.  
  269. void imprimirEdit (int i)                        //Funcion que concatena los numeros al hacer clic en los botones
  270. {
  271.    char cadenaEdit [35];                        //Variable donde se guardara lo que hay en el edit (no es la misma variable que cadenaEditMain)
  272.    char numero [2];                             //Variable donde se guardara el numero de la tecla presionada
  273.    sprintf (numero, "%i", i);                   //Se transforma el numero (i) del tipo entero a una cadena
  274.  
  275.    GetWindowText (edit, cadenaEdit, 34);        //Se obtiene lo que hay en el edit y se guarda en "CadenaEdit"
  276.    strcat (cadenaEdit, numero);                 //Se une lo que hay en "CadenaEdit" y lo que hay en "numero" (es decir, se une lo que habia en el edit y el numero de la tecla presionada) y se queda guardada la nueva cifra en "cadenaEdit"
  277.    SetWindowText (edit, cadenaEdit);            //Se imprime el nuevo numero en el edit
  278. }
  279.  
  280. double calcular (double primer_num, double segundo_num, int operacion)   //Funcion que realiza las operaciones
  281. {
  282.    double resultado;                                                    //Variable donde se guardara el resultado (sera lo que se retorne)
  283.  
  284.    switch (operacion)                                                   //Ver lo que hay en la variable "operacion"
  285.    {
  286.        case 1:                                                          //En caso de que sea "1" se suma el primer numero al segundo
  287.        {
  288.            resultado = primer_num + segundo_num;
  289.            break;
  290.        }
  291.        case 2:                                                          //En caso de que sea "2" se resta el primer numero al segundo
  292.        {
  293.            resultado = primer_num - segundo_num;
  294.            break;
  295.        }
  296.        case 3:                                                          //En caso de que sea "3" se multiplica el primer numero por el segundo
  297.        {
  298.            resultado = primer_num * segundo_num;
  299.            break;
  300.        }
  301.        case 4:                                                          //En caso de que sea "4" se divide el primer numero entre el segundo
  302.        {
  303.            resultado = primer_num / segundo_num;
  304.            break;
  305.        }
  306.        default:                                                         //Si no se realiza ninguna operacion se imprime en el edit un mensaje, con esto sabriamos si ha habido algun error
  307.        {
  308.            SetWindowText (edit, "No se ha realizado ninguna operacion.");
  309.            break;
  310.        }
  311.    }
  312.  
  313.    return resultado;                                                    //Devuelve el resultado
  314. }
  315.  

El fallo está en que al darle al signo igual, en vez de imprimir el resultado, manda el segundo número introducido. Todas las funciones y procesos van comentados.

Gracias por adelantado, saludos.

EDITO: El code está corregido, le faltan cosas como borrar números, limpiar el edit o cambiar de signo, pero lo que lleva por ahora funciona bien.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines