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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con mi source
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con mi source  (Leído 2,600 veces)
0x3c

Desconectado Desconectado

Mensajes: 108


learning, making mistakes, having fun


Ver Perfil
ayuda con mi source
« en: 2 Enero 2013, 17:39 pm »

Hola un usuario de este foro($Edu$) me sugirio que hiciera una calculadora, asi que me puse a practicar y el codigo resultante fue este:

Código:
#include <stdio.h>

int main()
{
  float val1,val2; /* declaro las variables que almacenaran los numeros/valores con que se va a trabajar */
  char c; /* declaro la variable que almacenara el signo/operador '+','*','/' o '-' */
  char op; /* declaro la variable que usare para las opciones */
  
  puts("Elige una opcion:"); /* le digo al usuario cuales son las opciones disponibles */
  puts("1 = Sumar");
  puts("2 = Restar");
  puts("3 = Multiplicar");
  puts("4 = Dividir");
  
  op=getchar(); /* le paso los parametros de la variable o a la funcion getchar() */
  if(op == '1'); /* si o igual a '1' */
  puts("As elegido sumar"); /* informo al usuario la opcion que ha elegido */
  scanf("%f%c%f",&val1,&c,&val2); /* almaceno los numeros/valores y el signo operador */
  if(c == '+'); /* lee el signo/operador y si es igual a + que haga lo de abajo */
  printf("%f",val1 + val2); /* y finalmente realizo la operacion elegida he imprimo el resultado */
  
  op=getchar();
  if(op == '2'); /* lo mismo que arriba xD */
  puts("As elegido restar!");
  scanf("%f%c%f",&val1,&c,&val2);
  printf("%f",val1 - val2);
  
  op=getchar();
  if(op == '3');
  puts("As elegido multiplicar!");
  scanf("%f%c%f",&val1,&c,&val2);
  if(c == '*');
  printf("%f",val1 * val2);
  
  op=getchar();
  if(op == '4');
  puts("As elegido dividir!");
  scanf("%f%c%f",&val1,&c,&val2);
  if(c == '/');
  printf("%f",val1 / val2);
  
  return(0);
}

pero ahora tengo un problema...cuando se muestran las opciones todo anda bien pero luego se vuerve un desastre...

Código:
1 = Sumar
2 = Restar
3 = Multiplicar
4 = Dividir
1
As elegido sumar                                                                                                              
22 + 30                                                                                                                      
21.999986As elegido restar!

ayuda y gracias de ante mano


« Última modificación: 2 Enero 2013, 17:46 pm por n3t_3rr0r » En línea

Si Vis Pacem, Para Bellum.

Another Legend Has Fallen
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: ayuda con mi source
« Respuesta #1 en: 2 Enero 2013, 19:03 pm »

Tiene toda la pinta de ser por que se ha llenado el buffer y se ha vuelto loco :rolleyes: . O limpias el buffer de esta manera:
Código
  1. while(c=getchar() != '\n'&& c!= EOF);
Poniendo el código anterior antes de cada scanf.
O usando fgets + sscanf(para evitar que se llene el buffer)(Este código lo puso Eternal Idol en su momento):
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5.    int opcion;
  6.  
  7.    do
  8.    {
  9.        printf("Opcion: ");
  10.        char linea[80];
  11.        fgets(linea, sizeof(linea), stdin);
  12.        sscanf(linea, "%d",&opcion);
  13.    }
  14.    while(opcion!=0);
  15.  
  16.    return 0;
  17. }
Revisa este post que está en las chinchetas:     |Lo que no hay que hacer en C/C++. Nivel basico|


« Última modificación: 2 Enero 2013, 19:05 pm por avesudra » En línea

Regístrate en
0x3c

Desconectado Desconectado

Mensajes: 108


learning, making mistakes, having fun


Ver Perfil
Re: ayuda con mi source
« Respuesta #2 en: 2 Enero 2013, 19:30 pm »

bueno gracias por hecharle un ojo a mi code reduje el codigo tanto como pude y todavia sigo teniendo problemas :/ quite las lineas donde aparecia getchar() y nada le quite los ; a las sentencias que contiene condicionales(eso tambien era un error) y nada....seguire tratando hasta que el codigo me funcione tomare tu consejo...








saludos
En línea

Si Vis Pacem, Para Bellum.

Another Legend Has Fallen
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: ayuda con mi source
« Respuesta #3 en: 2 Enero 2013, 20:20 pm »

bueno gracias por hecharle un ojo a mi code reduje el codigo tanto como pude y todavia sigo teniendo problemas :/ quite las lineas donde aparecia getchar() y nada le quite los ; a las sentencias que contiene condicionales(eso tambien era un error) y nada....seguire tratando hasta que el codigo me funcione tomare tu consejo...
Pues quitando los getchar, los punto y coma y "poniendo las llaves a los if" funciona ..... eso sí, le añadí un else por si se equivocan de signo y poco más:
Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.      float val1,val2; /* declaro las variables que almacenaran los numeros/valores con que se va a trabajar */
  6.      char c; /* declaro la variable que almacenara el signo/operador '+','*','/' o '-' */
  7.      char op; /* declaro la variable que usare para las opciones */
  8.  
  9.      puts("Elige una opcion:"); /* le digo al usuario cuales son las opciones disponibles */
  10.      puts("1 = Sumar");
  11.      puts("2 = Restar");
  12.      puts("3 = Multiplicar");
  13.      puts("4 = Dividir");
  14.  
  15.      op=getchar(); /* le paso los parametros de la variable o a la funcion getchar() */
  16.      if(op == '1'){/* si o igual a '1' */
  17.        puts("As elegido sumar"); /* informo al usuario la opcion que ha elegido */
  18.        scanf("%g%c%g",&val1,&c,&val2); /* almaceno los numeros/valores y el signo operador */
  19.        if(c == '+') /* lee el signo/operador y si es igual a + que haga lo de abajo */
  20.            printf("%g",val1 + val2); /* y finalmente realizo la operacion elegida he imprimo el resultado */
  21.        else
  22.            puts("Error en el signo");
  23.      }
  24.      if(op == '2'){/* lo mismo que arriba xD */
  25.        puts("As elegido restar!");
  26.        scanf("%g%c%g",&val1,&c,&val2);
  27.        if(c == '-')
  28.            printf("%g",val1 - val2);
  29.        else
  30.            puts("Error en el signo");
  31.    }
  32.    if(op == '3'){
  33.        puts("As elegido multiplicar!");
  34.        scanf("%g%c%g",&val1,&c,&val2);
  35.        if(c == '*')
  36.            printf("%g",val1 * val2);
  37.        else
  38.            puts("Error en el signo");
  39.    }
  40.  
  41.      if(op == '4'){
  42.        puts("As elegido dividir!");
  43.        scanf("%g%c%g",&val1,&c,&val2);
  44.        if(c == '/')
  45.            printf("%g",val1 / val2);
  46.        else
  47.            puts("Error en el signo");
  48.      }
  49.    return(0);
  50. }
  51.  
Saluditos!. ......  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
En línea

0x3c

Desconectado Desconectado

Mensajes: 108


learning, making mistakes, having fun


Ver Perfil
Re: ayuda con mi source
« Respuesta #4 en: 3 Enero 2013, 04:47 am »

muchisimas gracias! de verdad funciono :D ahora tengo unas dudas sobre las modificaciones que hiciste..

1- ese { que usaste lo usaste por que es necesario para el condicional?

Código:
if(op == '1'){

2- cambiaste el indentificador de la variable es decir cambiaste pusiste %g en vez de %f, por que? y como esto no afecta el funcionamiento del code?

Código:
scanf("%g%c%g",&val1,&c,&val2);

saludos y gracias
En línea

Si Vis Pacem, Para Bellum.

Another Legend Has Fallen
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: ayuda con mi source
« Respuesta #5 en: 3 Enero 2013, 07:10 am »

Citar
1- ese { que usaste lo usaste por que es necesario para el condicional?

Código:

if(op == '1'){
No es de mala onda pero en cualquier libro, nota, etc. acerca de C explica el uso del condicional if, cuando se abre las llaves y cuando se puede omitir

Citar
2- cambiaste el indentificador de la variable es decir cambiaste pusiste %g en vez de %f, por que? y como esto no afecta el funcionamiento del code?
Con solo googlear:
%g: Scan a floating-point number in either normal or exponential notation.


Saludos
« Última modificación: 3 Enero 2013, 07:16 am por durasno » En línea

Ahorrate una pregunta, lee el man
0x3c

Desconectado Desconectado

Mensajes: 108


learning, making mistakes, having fun


Ver Perfil
Re: ayuda con mi source
« Respuesta #6 en: 3 Enero 2013, 11:24 am »

bueno el problema del condicional es que estoy siguiendo un libro y no he legado a esa parte todavia(ha sido mas por pereza que por falta de tiempo) pero seguire practicando...y seguire publicando los codigos, dudas y preguntas que tenga en este foro :D que por cierto me alegra que sea tan activo :P







saludos
En línea

Si Vis Pacem, Para Bellum.

Another Legend Has Fallen
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: ayuda con mi source
« Respuesta #7 en: 3 Enero 2013, 17:30 pm »

.......que por cierto me alegra que sea tan activo :P

Citar
De novatillo a novatillo o sea entre tú y yo:
* Si el "cuerpo" del if, else, etc se compone de una sola sentencia no hacen falta las llaves. Fíjate que en el código que te pase hay if que sí tienen llaves -se componen de varias sentencias- y otros que no -sólo contienen una sentencia-.
** Si uso %f para imprimir 2 o 2.5 imprimirá 2.000000 o 2.500000, mientras que usando %g imprimirá 2 o 2.5, es decir "reduce" los decimales a su mínima expresión
*** El uso del "else" es opcional. Lo incluí por si la operación que se entra por teclado no se correspondía con la opción elegida..
Saluditos!. ............ [/size] :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
« Última modificación: 3 Enero 2013, 17:33 pm por leosansan » En línea

0x3c

Desconectado Desconectado

Mensajes: 108


learning, making mistakes, having fun


Ver Perfil
Re: ayuda con mi source
« Respuesta #8 en: 4 Enero 2013, 02:29 am »

bueno gracias por aclararme las dudas que tenia...las tendre pendiente para la proxima...







saludos
En línea

Si Vis Pacem, Para Bellum.

Another Legend Has Fallen
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda tmpgenc (source range)
Multimedia
petar221 3 1,892 Último mensaje 10 Septiembre 2004, 23:39 pm
por Songoku
AYUDA CON EL COUNTER STRIKE _ SOURCE
Juegos y Consolas
wilder 2 1,972 Último mensaje 3 Diciembre 2004, 16:02 pm
por jath_83
AYUDA CON EL COUNTER STRIKE SOURCE
Juegos y Consolas
juanjorome 0 1,320 Último mensaje 28 Diciembre 2004, 02:55 am
por juanjorome
ayuda con el counter-strike source
Juegos y Consolas
top_kart_14 5 1,983 Último mensaje 1 Abril 2005, 03:57 am
por DJ46
[Source] AuTomsn 2.0 Ayuda con dependencias
Programación Visual Basic
[Zero] 5 2,073 Último mensaje 29 Diciembre 2007, 16:55 pm
por [Zero]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines