Ayuda: cada ves que imprimo mi variable Float, cambia el contenido e.e

Iniciado por grox1, 12 Noviembre 2014, 20:37 PM

0 Miembros y 1 Visitante están viendo este tema.

grox1

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.

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*/
   

ivancea96

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.

grox1

Ahi la parte del codigo donde declaro todo:

#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;
}

ivancea96


grox1


ivancea96

No sé. Por cierto, en el código que pegaste, se te olvidó una llave.

zShackra

#6
Algo de offtopic...

Veo varias malas prácticas en tu algoritmo.

Te sugiero pasar por este tema...

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

rir3760

Cita de: grox1 en 12 Noviembre 2014, 20:37 PMTengo 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:
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:
printf("%f\n", m[z][5].multa);
printf("%f\n", m[z][5].multa);
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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language