Autor
|
Tema: problema con array de dos dimensiones (Leído 1,518 veces)
|
Didacso
Desconectado
Mensajes: 193
|
Hola , estoy haciendo un programa para mostrar un calendario por consola , tal como el comando cal de Linux y me encuentro al compilar el siguiente error , alguien sabe como debo arreglarlo ? el programa aún esta por desarrollar , solo quiero arreglar la función que me da problemas #include <stdio.h> #include <stdlib.h> #include <time.h> #define FILAS 5 #define COL 7 /*programa que muestra el mes en curso completo*/
void initdias(char d[][]); void contruyeCalendario(char d[][]);
char dias[FILAS][COL];
int main(){ /*printf("fecha: %d/%d/%d %d dias desde el domingo",ptrTiempo->tm_mday , ptrTiempo->tm_mon + 1 , ptrTiempo->tm_year + 1900 , ptrTiempo->tm_wday); */ return 0; }
void contruyeCalendario(char d[][]){ struct tm *ptrTiempo; time_t tiempo; tiempo = time(NULL); ptrTiempo = gmtime(&tiempo); initdias(d); }
/* Inicializa el arreglo de los días * */ void initdias(char d[][]){ int i , j ; i=0; j=0; for( ; i < FILAS ; i++ ){ for(; j < COL ; j++) d[i][j]=' '; } }
el mensaje calendar.c : In function initdias() calendar.c 44: error: invalid use of array with unspecified bounds
|
|
|
|
« Última modificación: 19 Marzo 2010, 19:36 por Didacso »
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
|
|
Didacso
Desconectado
Mensajes: 193
|
Ha funcionado perfectamente , por que se ha tenido que hacer de ésta manera?
|
|
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
Littlehorse
All the world's a stage
Moderador
 
Desconectado
Mensajes: 2.707
Nie Dam Sie
|
Porque el compilador necesita la referencia del primer elemento. En el lenguaje, por decirlo de una manera sencilla, no permite el pasaje de arreglos, por lo que algo como esto: void func(int array[]); en realidad es tratado como un puntero al primer elemento: void func(int *array); Un arreglo es una secuencia de datos, imagina que en el mismo prototipo de la función, con un arreglo multidimensional, tenes algo como esto: array[1]; En ese caso le marcas la segunda secuencia de enteros (los arrays comienzan en 0), pero al ser un arreglo multidimensional, sin saber cuantos datos tiene cada secuencia, no podes saber cuando empieza una y cuando termina la otra. Un saludo!
|
|
|
|
|
En línea
|
 @NeedOfSecurityAn expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
Didacso
Desconectado
Mensajes: 193
|
Entendido , gracias ...!!!
|
|
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
Didacso
Desconectado
Mensajes: 193
|
Y sigo , perdón por dar tanto la lata , pero que no encuentro la solución en google ahora el compilador se ha vuelto majareta y me da el siguiente error C:\DOCUME~1\diego\CONFIG~1\Temp/ccYZbaaa.o(.text+0x31):calendar.c: undefined ref erence to `construyeCalendario' collect2: ld returned 1 exit status
#include <stdio.h> #include <stdlib.h> #include <time.h> #define FILAS 5 #define COL 8 /*programa que muestra el mes en curso completo*/
void initdias(char d[FILAS][COL]); void contruyeCalendario(char d[FILAS][COL]); void cabecera(char dias[]);
int main(){ char dias[FILAS][COL]; int i , j ; construyeCalendario(dias); /*printf("fecha: %d/%d/%d %d dias desde el domingo",ptrTiempo->tm_mday , ptrTiempo->tm_mon + 1 , ptrTiempo->tm_year + 1900 , ptrTiempo->tm_wday); */ return 0; }
void contruyeCalendario(char d[FILAS][COL]){ struct tm *ptrTiempo; time_t tiempo; /*initdias(d);*/ tiempo = time(NULL); ptrTiempo = gmtime(&tiempo); /*cabecera(d[0]);*/ }
/* Inicializa el arreglo de los días * */ void initdias(char d[FILAS][COL]){ int i , j ; i=0; j=0; for( ; i < FILAS ; i++ ){ for(; j < COL ; j++) d[i][j]=' '; } }
void cabecera(char dias[]){ dias[1] = 'd'; dias[2] = 'l'; dias[3] = 'm'; dias[4] = 'm'; dias[5] = 'j'; dias[6] = 'v'; dias[7] = 's'; }
|
|
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
Littlehorse
All the world's a stage
Moderador
 
Desconectado
Mensajes: 2.707
Nie Dam Sie
|
construyeCalendario(dias); El prototipo de la función es: void contruyeCalendario(char d[FILAS][COL]); contruye!=construye. Saludos PD: No hagas doble post, y colorea el código. 
|
|
|
|
|
En línea
|
 @NeedOfSecurityAn expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
08l00D
Desconectado
Mensajes: 168
|
Lo que no entiendo en tu codigo es la parte donde llamas a printf en main. El puntero a estructura lo estas declarando en la otra funcion y lo implementas en main como si fuera una variable global (?) retornalo desde la funcion o declaralo como global..
|
|
|
|
|
En línea
|
|
|
|
Didacso
Desconectado
Mensajes: 193
|
Es culpa mía por no colorear el código, si te fijas bien esa parte está asteriscada , es por unas pruebas que estaba haciendo .
Littlehorse perdona pero no entiendo en qué se diferencian , estoy llamando mal a la función? otra cosa , donde puedo mirar las etiquetas para colorear el código ?
|
|
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
|
|
Didacso
Desconectado
Mensajes: 193
|
Hay que joderse no lo había visto , gracias de nuevo.
|
|
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
|
|
|
|