Título: Error en tamaño de vector en C
Publicado por: pirineo en 22 Febrero 2015, 18:25 pm
Buenas. Soy nuevo en C y estoy empezando a programar algunas cosas basicas, estoy intentando hacer un codigo que haga: Escriba un programa que lea la temperatura en grados Celsius al mediodía, durante todos los días de un mes, y luego informar la temperatura promedio mensual, así como el día más caluroso y el más frío, así como brindar la opción de consulta de las temperaturas guardadas hasta el momento, y modificar ó eliminar alguna temperatura mal introducida. pero al querer cargar al vector la temperatura del dia 12 del mes siempre se me rompe el programa... podrian ayudarme? les agradezco. #include <stdio.h> #include <stdlib.h>
int main () { int dias=0; int resp_menu=0, resp_mes=0, x=0,indmayor=0,indmenor=0,auxind=0; float grados[dias],acum=0,mayor=0, menor=100, temp_prom=0,nuevatemp=0,viejatemp=0; char resptemp; do { printf("MENU DE OPCIONES \n"); printf("1. Cargar datos \n") ; printf("2. Borrar datos \n") ; printf("3. Consultar temperaturas\n") ; printf("4. Modificar temperaturas\n") ; printf("5. Salir\n") ; scanf("%i",&resp_menu) ; switch(resp_menu) { case 1: system("cls") ; printf("de que mes desea ingresar temperaturas?....\n"); printf("1.Enero/Marzo/Mayo/Julio /Agosto/Octubre/Diciembre\n ") ; printf("2.Abril/Junio/Septiembre/Noviembre\n") ; printf("3.Febrero\n") ; scanf("%i",&resp_mes) ; if (resp_mes==1) { dias=31; } else if (resp_mes==2) { dias=30; } else { dias=28; } printf("DIAS QUEDO CON: %i",dias); system("pause"); system("cls"); for (x=0;x<dias;x++) //se supone que el vector grados tiene "dias" posiciones pero me salta error en 12 { printf("ingrese temperatura del dia %i: \n", x+1) ; fflush(stdin); scanf("%f",&grados[x]); acum=acum+grados[x]; if (grados[x]<menor) { menor=grados[x]; indmenor=x; } if (grados[x] >mayor) { mayor=grados[x] ; indmayor=x; } } temp_prom=acum/dias; system("pause"); break; case 2: for (x=0;x<dias;x++) { grados[x]=0; menor=0; mayor=0; temp_prom=0; } printf("datos borrados\n"); system("pause"); break; case 3: printf("TABLA DE TEMPERATURAS DEL MES\n"); printf("=================================\n"); printf("DIA TEMPERATURA\n"); for (x=0;x<dias;x++) { printf("%i %.2f\n",x+1,grados[x]); } printf("la temperatura promedio fue: %.2f\n",temp_prom); printf("la temperatura mas alta fue: %.2f del dia %i y la mas baja fue: %.2f del dia %i\n",mayor,indmayor,menor,indmenor); system("pause"); break; case 4: do { printf("Ingrese la fecha (numero de dia) que desea modificar: \n"); scanf("%i",&auxind); auxind=auxind-1; printf("Ingrese la nueva temperatura para el dia %i\n",auxind+1); scanf("%f",&nuevatemp); viejatemp=grados[auxind]; grados[auxind]=nuevatemp; printf("La anterior temperatura del ese dia era: %.2f ya lueva es: %.2f ",viejatemp,grados[auxind]); auxind=0; viejatemp=0; nuevatemp=0; printf("desea modificar la temperatura de otro dia?(s/n): \n"); fflush(stdin); scanf("%c,%resptemp"); }while (resptemp=='s'); system("pause"); break; case 5: system("cls"); printf("hasta luego...\n"); system("pause"); break; default: system("cls"); printf("OPCION INVALIDA, ingrese opcion valida! \n"); system("pause"); break; } }while (resp_menu!=5); return 0; }
Título: Re: Error en tamaño de vector en C
Publicado por: rir3760 en 22 Febrero 2015, 18:42 pm
El error principal en el programa es la declaración del array para almacenar las temperaturas: int dias=0; /* ... */ float grados[dias],acum=0,mayor=0, menor=100, temp_prom=0,nuevatemp=0,viejatemp=0;
Indicar el numero de elementos en un array mediante una variable solo esta garantizado en el estándar C99 y aun cuando sea posible el valor de la variable "dias" es cero. En su lugar utiliza una constante que considere el numero máximo de elementos y que en tu caso son los días del mes (máximo 31). Mas o menos así: #define MAX_DIAS 31 /* ... */ float grados[MAX_DIAS]; /* ... */
Otra recomendación es evitar el uso de la función system y fflush(stdin), el porque de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html). Un saludo
Título: Re: Error en tamaño de vector en C
Publicado por: pirineo en 22 Febrero 2015, 18:50 pm
Si, asignando un tamaño al ventor corre bien, pero me surge una duda: No hay forma de modificar dinamicamente en C el tamaño de un vector definido? es decir, no se puede hacer el que vector se "adapte" al tamaño del mes escogido por el usuario y no mas grande?
Le agradezco mucho su ayuda :)
Título: Re: Error en tamaño de vector en C
Publicado por: rir3760 en 22 Febrero 2015, 18:59 pm
Es posible si se compila según (y el compilador soporta) el estándar C99 (en C11 el soporte es opcional). En este caso debes obtener primero el numero de días y solo entonces declarar el array. Mas o menos así: int num_dias; /* Obtenemos de alguna forma el numero de dias */ double temp[num_dias];
Otra opción que no depende del estándar utilizado es reservar memoria mediante las funciones malloc, calloc o realloc. Poco mas o menos así: int num_dias; /* Obtenemos de alguna forma el numero de dias */ double *temp = malloc(num_dias * sizeof *temp );
Pero si apenas empiezas es mejor dejar ambas formas para después (por el momento utiliza arrays indicando su numero de elementos mediante una constante). Un saludo
|