Ahora soy yo el que necesita ayuda en C

#1
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!

P:eek: Espero no haberlos confundido.
 

NaviChavez

Bovino maduro
#2
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.
 

Zephyros

Bovino de la familia
#3
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.
 

Uhiho

Bovino maduro
#4
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.
 
#5
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 ... =)
 

c@rlito

Bovino de alcurnia
#6
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 !"
 
Arriba