Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Ahora soy yo el que necesita ayuda en C

parker_skywalker

Bovino maduro
Desde
3 Ene 2009
Mensajes
316
que tal bakunos!
ahora soy yo quien necesita de su ayuda en un programa que estoy haciendo por puro ocio para una materia que se llama Costos Y Presupuestos.

Bien, mi duda es la siguiente

Como puedo asignar una variable al limite o contenido de una matriz?
es decir.

printf ("Ingrese cuantas compras desea: ");
scanf("%d", &compras);

for(i=1; i<=compras; i++)
{
printf("Compra [%d]: ", i);
scanf("%d", &art);
}

Declare mi matriz como:
int art[compras];

porque segun yo, la matriz "art" tendra como contenido el numero de compras de la variable "compras".

Sin embargo, me manda mensaje de error:
que la matriz debe tener un "numero" y no una variable.


Alguien que me pueda echar la mano?
saludos!

PD: Espero no haberlos confundido.
 
El compilador debe tener las cantidades de memoria que va a usar antes de ejecutar el programa, o sea, que no puede ser así tan bonito como lo quieres.

Sugerencia: <tengo años de no mover C así que no recuerdo se funcione así> prueba con int *art

O sea, la idea es que declares un apuntador, de esta manera la memoria crece de forma dinámica.
 
El detalle en sí, es que los arrays en C/C++ no son dinámicos, es decir, no pueden crecer o lo opuesto. Deben ser de un tamaño fijo asignado al momento de ser declarados, por eso no puedes utilizar una variable como el tamaño del array.
 
Si estás compilando con un compilador para C y no para C++, entonces por eso es el error. En C no es aceptable poner una variable como el valor de elementos para un Array, ya que se supone que debe ser un valor estático. Con compiladores para C++ si es aceptable.

Pero para hacerlo con C, necesitas crear apuntadores.

printf ("Ingrese cuantas compras desea: ");
int compras;
scanf("%d", &compras);
int * art = (int *)malloc(compras * sizeof(int));
for(i=1; i<=compras; i++)
{
printf("Compra [%d]: ", i);
scanf("%d", &art);
}

De esta forma, como ves, creamos una variable puntero tipo int, y le asignamos un espacio de memoria (con malloc) del tamaño de un int multiplicado por la variable compras, es decir, va a contener compras * tamaño de int, es decir, si la variable compras vale 7, separará 7 veces el tamaño de un int, y de está manera se crea el Array. Utilizamos el (int) porque la función malloc devuelve un puntero a void, y debemos convertirlo en un puntero a int.
 
pues ese es el detalle mi hermano...
q se necesita un numero constante para definir el tamaño de una matriz...

lo mas conveniente o q puede resultar mas facil es declarar tu matriz con un tamaño de 100, es decir en tu caso int art(100); ...
y solo utilizar los espacios de la matriz q sean necesarios...

suerte ... =)
 
estoy de acuerdo compa !

Si estás compilando con un compilador para C y no para C++, entonces por eso es el error. En C no es aceptable poner una variable como el valor de elementos para un Array, ya que se supone que debe ser un valor estático. Con compiladores para C++ si es aceptable.

Pero para hacerlo con C, necesitas crear apuntadores.

printf ("Ingrese cuantas compras desea: ");
int compras;
scanf("%d", &compras);
int * art = (int *)malloc(compras * sizeof(int));
for(i=1; i<=compras; i++)
{
printf("Compra [%d]: ", i);
scanf("%d", &art);
}

De esta forma, como ves, creamos una variable puntero tipo int, y le asignamos un espacio de memoria (con malloc) del tamaño de un int multiplicado por la variable compras, es decir, va a contener compras * tamaño de int, es decir, si la variable compras vale 7, separará 7 veces el tamaño de un int, y de está manera se crea el Array. Utilizamos el (int) porque la función malloc devuelve un puntero a void, y debemos convertirlo en un puntero a int.


pues no esta x demas que indiques si tu compilador es en C ó C++, suerte !"
 
Volver
Arriba