Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: grox1 en 12 Noviembre 2014, 20:37 pm



Título: Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e
Publicado por: grox1 en 12 Noviembre 2014, 20:37 pm
Tengo esta parte del codigo y todas las variables estan declaradas tipo float y forman parte de una estructura-matriz.
El problema que tengo es que cuando hace la cuenta, se guarda en la variable y cuando la imprimo la primera ves, se imprime el valor correcto, pero cuando intenta imprimirla la segunda ves, se imprime un valor que nada que ver xD, ya puse fflush(stdin) pero parece que eso no le hacia nada aj.
Código:
	m[z][5].multa=2000+(1.50*(m[z][2].velreg-m[z][3].vellim));

printf("%f\n", m[z][5].multa); /*primer valor da correcto*/
printf("%f\n", m[z][5].multa); /*valor nada que ver*/
printf("%f\n", m[z][5].multa); /*valor nada que ver*/
   


Título: Re: Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e
Publicado por: ivancea96 en 12 Noviembre 2014, 20:42 pm
Me parece muy extraño. Si puedes poner el código donde creas la matriz, y la estructura, se podría ver mejor.

Por cierto, colócalos entre las etiquetas GeSHi de C para que se vea mejor.


Título: Re: Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e
Publicado por: grox1 en 12 Noviembre 2014, 20:47 pm
Ahi la parte del codigo donde declaro todo:
Código:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define Y 5

int r1, z, x, j, cont=0, h, cont1=0, b;
float prom, acum, a, c;
struct infrac{
int nr;
int sec;
float velreg;
float vellim;
char fecha[10];
float multa;
}m;
main(){
printf("Ingrese la cantidad de Infracciones que tiene para cargar:\n");
scanf("%d", &r1);
struct infrac m[r1][Y];
z=-1;
cont1=0;
while(cont1<r1){
z=z+1;
system("cls");
printf("Numero de Registro:\n");
scanf("%d", &m[z][0].nr);
printf("Sector en el que se produjo la infraccion(1-4):\n");
scanf("%d", &m[z][1].sec);
printf("Velocidad Registrada(Km/h):\n");
scanf("%f", &m[z][2].velreg);
printf("Velocidad Limite(Km/h):\n");
scanf("%f", &m[z][3].vellim);
printf("Fecha(dd/mm/aa):\n");
fflush(stdin);
gets(m[z][4].fecha);
m[z][5].multa=2000+(1.50*(m[z][2].velreg-m[z][3].vellim));
printf("%f\n", m[z][5].multa); /*primer valor da correcto*/
printf("%f\n", m[z][5].multa); /*valor nada que ver*/
printf("%f\n", m[z][5].multa); /*valor nada que ver*/
cont1=cont1+1;
}


Título: Re: Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e
Publicado por: ivancea96 en 12 Noviembre 2014, 20:53 pm
A mi me funciona perfectamente.


Título: Re: Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e
Publicado por: grox1 en 12 Noviembre 2014, 20:55 pm
entonces puede ser mi compilador? tengo el dev c++ 5.7.1


Título: Re: Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e
Publicado por: ivancea96 en 12 Noviembre 2014, 21:00 pm
No sé. Por cierto, en el código que pegaste, se te olvidó una llave.


Título: Re: Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e
Publicado por: zShackra en 12 Noviembre 2014, 21:03 pm
Algo de offtopic...

Veo varias malas prácticas en tu algoritmo.

Te sugiero pasar por este (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html) tema...

Y usar un compilador decente... Al menos intenta con Code::Blocks o Visual C++ Express... (QtCreator es una buena alternativa).


Título: Re: Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e
Publicado por: rir3760 en 13 Noviembre 2014, 04:18 am
Tengo esta parte del codigo y todas las variables estan declaradas tipo float y forman parte de una estructura-matriz.
Ese programa tiene varios errores algunos relacionados con el lenguaje y otros de concepto.

* Para empezar no es necesario utilizar un array de arrays (mal y mejor conocido como "matriz", tal cosa en el lenguaje C no existe), mas todavía: no utilizas todos los campos de cada elemento.

* Declaras el array indicando su numero de elementos mediante una variable:
Código
  1. struct infrac m[r1][Y];
Eso no es valido en C90, valido en C99 y opcional en C11 así que vas a tener que revisar la documentación de tu compilador para conocer cual es su caso (mejor utilizar malloc ya que es soportado en los tres estándares).

* En C los indices validos inician en 0 y terminan en N-1 donde N es el numero de elementos del array, tu utilizas uno invalido en las lineas:
Código
  1. printf("%f\n", m[z][5].multa);
  2. printf("%f\n", m[z][5].multa);
  3. printf("%f\n", m[z][5].multa);

* Por ultimo declaras una variable "m" antes de la función main la cual no utilizas y por ende deberías eliminar. Y si deseas imprimir una cadena literal terminada con '\n' en lugar de printf es mejor utilizar puts.

Un saludo