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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Codigo en C se cuelga sin motivo aparente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Codigo en C se cuelga sin motivo aparente  (Leído 3,726 veces)
Steel_Falcon

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Codigo en C se cuelga sin motivo aparente
« en: 7 Agosto 2012, 14:00 pm »

Hola, esta es mi primer codigo asi que no seais muy duros conmigo si estoy cometiendo un error de noob.

Resulta que he intentado crear una calculadora simple capaz de sumar, restar, multiplicar y dividir. Los cálculos los realiza sin problemas pero cuando da la solución quiero que pregunte al usuario si quiere realizar otra operación o salir del programa.Cuando el usuario selecciona la opción que quiere es donde se cuelga el programa. Por mas que lo busco no consigo encontrar donde está el fallo. :(

Código:
/* Calculadora simple en C */

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    int integer1, integer2, total, opcion, opcion2;
   
    printf("Hola mundo\n");
    printf("Soy una calculadora\ny voy a hacer la operaci\242n que tu quieras\n");
   
   
    top:
        printf ("Pulsa 1 para sumar\nPulsa 2 para restar\nPulsa 3 para multiplicar\nPulsa 4 para dividir\nPulsa 5 para salir\n");       
   
    /*
    sumar = 1
    restar =2
    multiplicar =3
    dividir = 4
    salir = 5
    */
   
    scanf ("%d", &opcion);
   
    if (opcion == 5) {
        printf("Adios!!!\n");
        getch(); //<conio.h>
        return 0;
    }else
   
   
   
   
    if (opcion == 1) {
       
        printf("Primero introduce la cantidad inicial\n");
        scanf("%d", &integer1);
        printf("Ahora introduce la cantidad que quieras sumarle a la cantidad anterior\n");
        scanf ("%d", &integer2);
        total = integer1 + integer2;
        printf("Estoy sumando....\n");
        getch(); //<conio.h>
        printf("La cantidad es %d\n", total);
        getch(); //<conio.h>
        goto fin;
       }else;
   
   
   
   
   
   
    if (opcion ==2){
        printf ("Primero introduce la cantidad inicial\n");
        scanf("%d", &integer1);
        printf("Ahora introduce la cantidad que quieras restarle a la cantidad anterior\n");
        scanf ("%d", &integer2);
        total = integer1 - integer2;
        printf("Estoy restando....\n");
        getch(); //<conio.h>
        printf("La cantidad es %d\n", total);
        getch(); //<conio.h>
        goto fin;
    }else
   
   
   
   
    if (opcion ==3){
        printf ("Primero introduce la cantidad inicial\n");
        scanf("%d", &integer1);
        printf("Ahora introduce la cantidad por la que quieras multiplicar la cantidad anterior\n");
        scanf ("%d", &integer2);
        total = integer1 * integer2;
        printf("Estoy multiplicando....\n");
        getch(); //<conio.h>
        printf("La cantidad es %d\n", total);
        getch(); //<conio.h>
        goto fin;
     }else
   
   
   
   
    if (opcion ==4)
    printf ("Primero introduce la cantidad inicial\n");
        scanf("%d", &integer1);
        printf("Ahora introduce la cantidad entre la que quieras dividir la cantidad anterior\n");
        scanf ("%d", &integer2);
        total = integer1 / integer2;
        printf("Estoy dividiendo....\n");
        getch(); //<conio.h>
        printf("La cantidad es %d\n", total);
        getch(); //<conio.h>
        goto fin;
     
     
     
     
       
fin:
    printf("Si quieres salir pulsa 1\nSi quieres hacer otra operaci\242n pulsa 2\n");
        scanf ("%d", opcion2);
            if (opcion2 == 1){
                printf("Adios!!!\n");
                getch(); //<conio.h>
                return 0;
            }else
           
            if (opcion2 ==2)
                goto top;

}

Gracias adelantadas. :)


En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: Codigo en C se cuelga sin motivo aparente
« Respuesta #1 en: 7 Agosto 2012, 14:24 pm »

Código
  1. fin:
  2.    printf("Si quieres salir pulsa 1\nSi quieres hacer otra operaci\242n pulsa 2\n");
  3.        scanf ("%d", opcion2);
  4.            if (opcion2 == 1){
  5.                printf("Adios!!!\n");
  6.                getch(); //<conio.h>
  7.                return 0;
  8.            }else
  9.  
  10.            if (opcion2 ==2)
  11.                goto top;
  12.  

Código:
scanf ("%d", opcion2);

eso es así:

Código:
 scanf ("%d", &opcion2);

Con ese & funciona perfecto ;)

saludos.


En línea

Un byte a la izquierda.
Steel_Falcon

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Codigo en C se cuelga sin motivo aparente
« Respuesta #2 en: 7 Agosto 2012, 14:32 pm »

Muchísimas gracias :D, no entiendo como se me había podido pasar algo tan obvio.
Como no me aparecían errores de sintaxis en el IDE pensé que sería algun problema con la estructura de los if-else.

Podemos dar este tema por cerrado.
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Codigo en C se cuelga sin motivo aparente
« Respuesta #3 en: 7 Agosto 2012, 14:40 pm »

yo quisiera saber que significa eso de "top" y "fin". por favor??
En línea


fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: Codigo en C se cuelga sin motivo aparente
« Respuesta #4 en: 7 Agosto 2012, 15:18 pm »

yo quisiera saber que significa eso de "top" y "fin". por favor??

Son etiquetas, se pueden usar para muchas cosas, en esta ocasion el las usa para saltar de nuevo a una parte de la funcion. Salta con goto ej: goto top;

saludos.
En línea

Un byte a la izquierda.
maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Codigo en C se cuelga sin motivo aparente
« Respuesta #5 en: 7 Agosto 2012, 15:21 pm »

top y fin son etiquetas.... para hacer saltos con el goto....
El uso del goto está contraindicado.... Y no se debería usar y menos en un programa tan sencillo.

Podrías solucionarlo mediante un do-while... y lo mejor que puedes hacer es ir olvidando el goto y su práctica....
Tambien estaría muy bien, que usaras un switch... en vez de encadenar tantos ifs....

Basicamente seria

do{
printf ("Pulsa 1 para sumar\nPulsa 2 para restar\nPulsa 3 para multiplicar\nPulsa 4 para dividir\nPulsa 5 para salir\n");
scanf ("%d", &opcion);

 printf("Primero introduce la cantidad inicial\n");
 scanf("%d", &integer1);
 printf("Ahora introduce la cantidad que quieras sumarle a la cantidad anterior\n");
 scanf ("%d", &integer2);
switch(opcion){
case 1:  total= integer1 + integer2;break;
case 2: total=integer1-integer2;break;
case 3:total=integer1*integer2;break;
case 4:total=integer1/integer2;break;
}

if(opcion!=5)
printf("La cantidad es %d\n", total);
getchar();
}while(opcion!=5);


Mas o menos sería asi... Lo he hecho rapido y no se si está bien , pero vamos esa es la idea.... tambien si puedes no usar la libreria conio.h ... ya que no es estandar y dara muchos fallos y te hará que no pueda ser portable....
Aqui tienes un link donde te da consejos :
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Codigo en C se cuelga sin motivo aparente
« Respuesta #6 en: 7 Agosto 2012, 15:34 pm »

ummm vale muchas gracias, nunca habia visto el goto, habia visto el break y el continue pero no ese.
En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Borrado de respuesta sin motivo aparente (petición de traduccion)
Sugerencias y dudas sobre el Foro
Silici0 5 4,344 Último mensaje 17 Abril 2009, 13:02 pm
por Novlucker
PC recien formateado se apaga sin aparente motivo « 1 2 3 »
Hardware
Sauruxum 23 21,942 Último mensaje 15 Noviembre 2010, 09:36 am
por marlon_agz
Me cerraron mi cuenta de facebook sin motivo aparente « 1 2 »
Foro Libre
Dieg^S 15 8,622 Último mensaje 22 Marzo 2012, 06:14 am
por Dieg^S
Poratil/Laptop se reinicia sin motivo aparente « 1 2 »
Windows
Sub_Cero 17 8,830 Último mensaje 27 Junio 2013, 22:31 pm
por OmarHack
iPhone explota en una peluquería sin motivo aparente
Noticias
wolfbcn 0 1,384 Último mensaje 11 Febrero 2018, 02:02 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines