Anuncios Google

invalid use of array with unspecified bounds

Bueno, tengo un problema. Me sale el error del título y buscando por internet me he enterado de que es porque a arrays multidimensionales no se les puede poner dos indices indefinidos.

Al caso, alguna manera de utilizarlo sin repetir le código 10 veces, una por cada índice?

Aquí el código que tengo:

/*Creado por: P22
Para: Scenebeta*/
#include <stdio.h>
#include <stdlib.h>
 
int main(){
/*Definición de variables auxiliares*/
   int nrestau;
   int i;
   char continuar = 'Y';
   int repetir = 0;
 
/*Definición de arrays*/
   int ganancias[11][9]; /*ganancias de cada restaurante*/
   int sumatotal[9]; /*Suma de ganancias de cada mes en cada restaurante*/
   char nombres[9][9]; /*Nombre de cada restaurante*/
 
/*Declaraciones de funciones*/
   void pedirvalores(int a, int b[11][9], char c[9][9], int sumatotal[9]);
   void sacarsalida(int a, char c[9][9], int d[9]);
 
   printf("Bienvenido. Este programa te ayudara a calcular ganancias brutas\n");
 
   do{
      do{
         printf("Por favor, introduce el numero de restaurantes con los que deseas hacer calculos (0 = parar, de 1 a 10 para continuar): ");
         scanf("%d", nrestau);
         if (nrestau > 10 || nrestau < 0) repetir = 1;      } while(repetir != 0);
 
      if (nrestau == 0) break;
 
      pedirvalores(nrestau, ganancias, nombres, sumatotal);
      sacarsalida(nrestau, nombres, sumatotal);
 
      printf("\n\nDeseas continuar? (Y/N): ");
      scanf("%c", continuar);
 
   } while(toupper(continuar) == 'Y' );
 
   printf("\n\n\nHasta pronto, espero haberte sido util");   
 
   getchar();
   return 0;
}
 
 
void pedirvalores(int a, int b[][], char c[][], int d[]){
   int i, y;
   char j;
 
   printf("\n\nHola! Soy la funcion pedirvalores \nEstoy aquí para recibir datos y almacenarlos");
   printf("\nEn primer lugar, me vas a indicar el nombre de cada restaurante:\n\n");
 
 
/*El error empieza aquí*/
   for (i = 0; i < a; i++){
 
      for (y = 0; y < 10; y++){
         j = getchar();
         /*Aquí el error*/
         c[i][y] = j; /*Error*/
         if (j == '\n'){
         y = 9;
         }
      }
 
   }
 
   return;
   }
 
void sacarsalida(int a, char c[][], int d[]){
   printf("Hola mundo");
   return;
   }

Es para los tutoriales. Vuestro nombre aparecerá en los agradecimientos si me ayudais exitosamente.


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Almamu

Prueba que cuando declares la

Prueba que cuando declares la funcion(arriba del todo)y cuando la declares para usarla ponerle a los arrays los valores maximos, no estoy seguro, pero me parece que es porque al declarar la funcion arriba le das limites a los arrays y abajo los dejas vacios...


Imagen de P22

No es por eso

Creo que no has comprendido el problema. Los arrays no están relacionados con las funciones. El problema está en la línea inferior al getchar. El error consiste en que al menos uno de los índices tiene que ser definido. Yo digo si alguien es capaz de ayudarme a solucionar el código creando alguna pieza para el mismo...

Gracias de todos modos.

Se te ocurre otra cosa?


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Almamu

Cagada mia. He compilado en

Cagada mia. He compilado en Code::Blocks ese codigo y me da error en las funciones void pedirvalores y void sacarsalida:

void pedirvalores(int a, int b[][], char c[][], int d[]){
 
void sacarsalida(int a, char c[][], int d[]){

Prueba cambiandolas por esto:

void pedirvalores(int a, int b[11][9], char c[9][9], int sumatotal[9]){
 
void sacarsalida(int a, char c[9][9], int d[9]){

Y dentro de la funcion pedirvalores cambia todas las variables d por sumatotal.


Imagen de P22

No me has entendido

El problema está aquí:

  for (y = 0; y < 10; y++){
         j = getchar();
         /*Aquí el error*/
         c[i][y] = j; /*Error*/
         if (j == '\n'){
         y = 9;

Como puedes ver, el array c[i][y]; está con índices indefinidos, o lo que es lo mismo, que los índices son variables y no números explicitos. Lo otro que me has dicho no influye, pues no tiene índices para permitir que los arrays pasados tengan un tamaño cualquiera.

Ahora, la pregunta es si me puedes ayudar a cambiar el índice de alguna de ellas por un número sin tener que repetir la misma pieza de código 10 veces...


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Almamu

Aver, a mi esa linea no me da

Aver, a mi esa linea no me da ningun error al compilarlo en Code::Blocks, ¿Que compilador estás usando?

Y cuando uses while no uses do, porque muchas veces hace el codigo algo complicado de leer(si estas acostumbrado puede que no sea asi, pero a mi se me hace algo dificil...):

while(repetir == 0){
         printf("Por favor, introduce el numero de restaurantes con los que deseas hacer calculos (0 = parar, de 1 a 10 para continuar): ");
         scanf("%d", nrestau);
         if (nrestau > 10 || nrestau < 0) repetir = 0; else repetir = 1;     
}

Lleva cuidado al usar los scanf, se usan asi:

scanf("%i", &var_int);

y no como tu lo usas:

scanf("%c", continuar);

Te falta el operador & antes del nombre de la variable.

Hay varios errores de esos.

Lo acabo de provar con varios cambios y parece que funciona bien, te dejo el codigo:

/*Creado por: P22
Para: Scenebeta*/
#include <stdio.h>
#include <stdlib.h>
 
int main(){
/*Definición de variables auxiliares*/
   int nrestau;
   int i;
   char continuar = 'Y';
   int repetir = 0;
 
/*Definición de arrays*/
   int ganancias[11][9]; /*ganancias de cada restaurante*/
   int sumatotal[9]; /*Suma de ganancias de cada mes en cada restaurante*/
   char nombres[9][9]; /*Nombre de cada restaurante*/
 
/*Declaraciones de funciones*/
   void pedirvalores(int a, int b[11][9], char c[9][9], int *sumatotal);
   void sacarsalida(int a, char c[9][9], int d[9]);
 
   printf("Bienvenido. Este programa te ayudara a calcular ganancias brutas\n");
 
   do{
      do{
         printf("Por favor, introduce el numero de restaurantes con los que deseas hacer calculos (0 = parar, de 1 a 10 para continuar): ");
         scanf("%d", &nrestau);
         if (nrestau > 10 || nrestau < 0) repetir = 1;      } while(repetir != 0);
 
      if (nrestau == 0) break;
 
      pedirvalores(nrestau, ganancias, nombres, sumatotal);
      sacarsalida(nrestau, nombres, sumatotal);
 
      printf("\n\nDeseas continuar? (Y/N): ");
      scanf("%c", &continuar);
 
   } while(toupper(continuar) == 'Y' );
 
   printf("\n\n\nHasta pronto, espero haberte sido util");
 
   getchar();
   return 0;
}
 
 
void pedirvalores(int a, int b[11][9], char c[9][9], int *sumatotal){
   int i, y;
   char j;
 
   printf("\n\nHola! Soy la funcion pedirvalores \nEstoy aquí para recibir datos y almacenarlos");
   printf("\nEn primer lugar, me vas a indicar el nombre de cada restaurante:\n\n");
 
 
/*El error empieza aquí*/
   for (i = 0; i < a; i++){
 
      for (y = 0; y < 10; y++){
         j = getchar();
         /*Aquí el error*/
         c[i][y] = j; /*Error*/
         if (j == '\n'){
         y = 9;
         }
      }
 
   }
 
//   return;
   }
 
void sacarsalida(int a, char c[9][9], int d[9]){
   printf("Hola mundo");
   //return;
   }

Solo he arreglado varios scanf y poco mas.

Te recomiendo tambien que cuando declares funciones lo hagas en modo global, puesto que si te hacen falta llamarlas desde otro sitio no podrás.


Imagen de P22

Muchisimas gracias

a mi en Dev-C++ el error me salía donde dije, pero poniendo lo que tu dices funciona bien. De todos modos, Dev-C++ lleva dandome problemas desde que lo instalé (ayer ya ni compilaba), y al instalar code blocks todo funcionó bien

Saludos y muchas gracias


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Almamu

De nada, porcierto, Dev-C++

De nada, porcierto, Dev-C++ esta abandonado(por lo que yo se)as´i que mejor quedate en Code::Blocks, xD.

Imagen de P22

O.o

En serio está abandonado??? Pues me voy a ver obligado a quedarme, aunque pensaba hacerlo estuviese parado o no :P

Imagen de the dragon lives

El primer proyecto si

Pero hace poco sacaron un nuevo wnDev-C++, su pagina oficial

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.