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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en tamaño de vector en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en tamaño de vector en C  (Leído 2,146 veces)
pirineo

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Error en tamaño de vector en C
« 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.

Código:
#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;
}


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error en tamaño de vector en C
« Respuesta #1 en: 22 Febrero 2015, 18:42 pm »

El error principal en el programa es la declaración del array para almacenar las temperaturas:
Código
  1. int dias=0;
  2. /* ... */
  3. 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í:
Código
  1. #define MAX_DIAS  31
  2.  
  3. /* ... */
  4.  
  5. float grados[MAX_DIAS];
  6.  
  7. /* ... */

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|.

Un saludo


En línea

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
pirineo

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Error en tamaño de vector en C
« Respuesta #2 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   :)

En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error en tamaño de vector en C
« Respuesta #3 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í:
Código
  1. int num_dias;
  2.  
  3. /* Obtenemos de alguna forma el numero de dias */
  4.  
  5. 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í:
Código
  1. int num_dias;
  2.  
  3. /* Obtenemos de alguna forma el numero de dias */
  4.  
  5. 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
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
tamano Vector
Java
DiTeN 3 3,749 Último mensaje 19 Septiembre 2009, 04:44 am
por DiTeN
Error al pasar un vector de una funcion a otra
Programación C/C++
loadenro 5 3,026 Último mensaje 30 Mayo 2014, 08:20 am
por eferion
C++ Error al borrar última casilla de un vector con iteradores « 1 2 »
Programación C/C++
Orubatosu 13 8,212 Último mensaje 4 Diciembre 2014, 10:16 am
por Eternal Idol
error varias referencias de structs metidas en vector
Programación C/C++
DAMIANNN 1 1,595 Último mensaje 18 Enero 2017, 20:04 pm
por ivancea96
InnoDB columna varchar única limitación de tamaño | error 1071
Bases de Datos
patilanz 0 1,814 Último mensaje 12 Febrero 2018, 00:33 am
por patilanz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines