Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Que pasa con mi operacion!!

Estas en el tema de Que pasa con mi operacion!! en el foro de C/C++ en Foros del Web. Hola, tengo muy frecuetemente este clase de problemas en c++ y queria ver quien me podria ayudar con este codigo, que en vez de imprimirme ...
  #1 (permalink)  
Antiguo 11/09/2013, 17:12
 
Fecha de Ingreso: septiembre-2013
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Que pasa con mi operacion!!

Hola, tengo muy frecuetemente este clase de problemas en c++ y queria ver quien me podria ayudar con este codigo, que en vez de imprimirme el resultado de la operacion me imprime 0.00.
Me gustaria que me explicacen bien claro que es lo que me esta pasando para poder solucionarlo yo mismo, Gracias por leer.

Codigo:

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

main()
{

float cali1, cali2, cali3, cali4, cali5, cali6, suma, promedio;
char matricula[20], nombre[20], especialidad[20], grupo[20];

gotoxy(36,2);
printf("CECYTE PLANTEL VILLA DEL SOL");
gotoxy(27,3);
printf("Privada Paseo del Sol S/N Villa del Sol CP: 22205");
gotoxy(38,4);
printf("Tels. 972-5410 y 972-5411");

gotoxy(6,7);
printf("Coltrol escolar");
gotoxy(2,8);
printf("------------------------------…
gotoxy(2,21);
printf("------------------------------…

gotoxy(6,9);
printf("Matricula: ");
gotoxy(9,10);
printf("Nombre: ");
gotoxy(53,9);
printf("Especialidad: ");
gotoxy(60,10);
printf("Grupo: ");
gotoxy(6,13);

printf("Calificaciones...");
gotoxy(16,14);
printf("Ingles: ");
gotoxy(3,15);
printf("Geometria Analitica: ");
gotoxy(3,16);
printf("Estructura de datos: ");
gotoxy(15,17);
printf("C.T.S.V: ");
gotoxy(14,18);
printf("Biologia: ");
gotoxy(6,19);
printf("Arquitectura Web: ");

gotoxy(54,19);
printf("Promedio: [ ]");

gotoxy(17,9);
gets(matricula);
gotoxy(67,9);
gets(especialidad);
gotoxy(17,10);
gets(nombre);
gotoxy(67,10);
gets(matricula);

gotoxy(24,14);
scanf("%f",&cali1);
gotoxy(24,15);
scanf("%f",&cali2);
gotoxy(24,16);
scanf("%f",&cali3);
gotoxy(24,17);
scanf("%f",&cali4);
gotoxy(24,18);
scanf("%f",&cali5);
gotoxy(24,19);
scanf("%f",&cali6);

suma = cali1 + cali2 + cali3 + cali4 + cali5 + cali6;


promedio = suma / 6;

gotoxy(66,19);
printf("%.2f",&promedio);

getch();
}
  #2 (permalink)  
Antiguo 11/09/2013, 20:57
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Que pasa con mi operacion!!

Buenas, el problema está en:
Código C:
Ver original
  1. printf("%.2f",&promedio);

Cuando usas el operador & estás especificando la dirección en la memoria donde está almacenado la variable promedio más no los datos que están en dicha variable. La solución es sencilla, solo quitarle el operador & y listo.

Código C:
Ver original
  1. printf("%.2f",promedio);

Tengo dos recomendaciones para ti, creo que es mejor tratarlas ahora.

La primera recomendación, usar la librería conio.h es una mala práctica de programación. Primero, porque no es portable a otro sistema operativo, y segundo al usuario final, lo que interesa es que el programa funcione correctamente, posicionar el texto ya está de más. Si de igual forma quieres hacerlo, puedes usar otras librerías como ncurses que si es portable haciendo solo unos pocos cambios.

Y como segunda recomendación, la función gets desde hace bastante tiempo está resaltada como peligrosas en la mayoría de los compiladores, ¿por qué? fácil, no tiene un limite de caracteres a introducir en la variable. Supongamos que quieres introducir en la variable matricula un texto mayor a los 20 caracteres que especificaste, esto hace que el programa tenga un error inesperado y se cierre, porque escribe en una parte de la memoria donde no debería escribir, y esto es un fallo grande en la seguridad de tu programa, donde se pudieran hacer diferentes tipos de ataques comprometiendo al usuario final.

Como solución, puedes usar la función fgets, para introducir un string en una variable. Ejemplo:

Código C:
Ver original
  1. fgets(matricula, sizeof(matricula), stdin)

Saludos.
  #3 (permalink)  
Antiguo 12/09/2013, 17:02
 
Fecha de Ingreso: septiembre-2013
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Que pasa con mi operacion!!

Woooow!
Gracias, No esperaba una respuesta tan completa y mucho menos tan buenas recomendaciones, de verdad muchas gracias
  #4 (permalink)  
Antiguo 12/09/2013, 17:03
 
Fecha de Ingreso: septiembre-2013
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Que pasa con mi operacion!!

Cita:
Iniciado por guzzano Ver Mensaje
Buenas, el problema está en:
Código C:
Ver original
  1. printf("%.2f",&promedio);

Cuando usas el operador & estás especificando la dirección en la memoria donde está almacenado la variable promedio más no los datos que están en dicha variable. La solución es sencilla, solo quitarle el operador & y listo.

Código C:
Ver original
  1. printf("%.2f",promedio);

Tengo dos recomendaciones para ti, creo que es mejor tratarlas ahora.

La primera recomendación, usar la librería conio.h es una mala práctica de programación. Primero, porque no es portable a otro sistema operativo, y segundo al usuario final, lo que interesa es que el programa funcione correctamente, posicionar el texto ya está de más. Si de igual forma quieres hacerlo, puedes usar otras librerías como ncurses que si es portable haciendo solo unos pocos cambios.

Y como segunda recomendación, la función gets desde hace bastante tiempo está resaltada como peligrosas en la mayoría de los compiladores, ¿por qué? fácil, no tiene un limite de caracteres a introducir en la variable. Supongamos que quieres introducir en la variable matricula un texto mayor a los 20 caracteres que especificaste, esto hace que el programa tenga un error inesperado y se cierre, porque escribe en una parte de la memoria donde no debería escribir, y esto es un fallo grande en la seguridad de tu programa, donde se pudieran hacer diferentes tipos de ataques comprometiendo al usuario final.

Como solución, puedes usar la función fgets, para introducir un string en una variable. Ejemplo:

Código C:
Ver original
  1. fgets(matricula, sizeof(matricula), stdin)

Saludos.
Woooow!
Gracias, No esperaba una respuesta tan completa y mucho menos tan buenas recomendaciones, de verdad muchas gracias

Etiquetas: struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:25.