PDA

View Full Version : [C] Matrice


Isildur84
24-02-2005, 21:26
Sono disperato, non riesco a capire cosa vuol dire l'errore che il compilatore mi riporta!!

Il programma è molto semplice costruisce una matrice leggendo dei dati da tastiera fino a quando non si preme EOF e poi li stampa. Nel seguito riporo sorgente ed errore. Un grazie a chi mi aiuterà.

#include <stdio.h>

#define COLONNE 20
#define RIGHE 100

int riempimento (char [][], int, int);
void stampa (char [][], int);

int main () {

int lunghezza;

char cognomi[RIGHE][COLONNE];

lunghezza = riempimento(cognomi, RIGHE, COLONNE);

printf ("\n\n");

stampa(cognomi, lunghezza);

printf ("\n\n");

return 0;

}

int riempimento (char cognomi[][], int righe, int colonne) {

int i = 0, j = 0;

for (; i < righe && cognomi[i-1][j] != EOF; i++);

for (j = 0; j < colonne - 1 && (cognomi[i][j] = getchar()) != '\n'; j++);

cognomi[i][j+1] = '\0';

return i;

}

void stampa (char cognomi[][], int max) {

int i = 0, j = 0;

for (; i < max; i++)

for (j = 0; cognomi[i][j] != '\0'; j++)

printf ("%c", cognomi[i]);

}


L'errore è il seguente:

Cognomi.c: In function `riempimento':
Cognomi.c:31: error: invalid use of array with unspecified bounds
Cognomi.c:31: error: invalid use of array with unspecified bounds
Cognomi.c:33: error: invalid use of array with unspecified bounds
Cognomi.c:35: error: invalid use of array with unspecified bounds
Cognomi.c: In function `stampa':
Cognomi.c:47: error: invalid use of array with unspecified bounds
Cognomi.c:49: error: invalid use of array with unspecified bounds
Cognomi.c:51:2: warning: no newline at end of file
[simone@localhost Programmazione in C]$

Ubi-Wan
24-02-2005, 22:31
l'errore sta nella dichiarazione dei prototipi delle funzioni e nella dichiarazione delle funzioni stesse. Cioe' quando dichiari vettori multidimensionali puoi omettere solo il numero di righe, ma devi specificare tutti gli altri (in questo devi specificare quante colonne).

Quindi non void stampa (char [][], int); ma void stampa(char [][COLONNE], int); e cosi' tutti gli altri.

Questo perche' il numero di righe non e' importante, ma quello delle colonne si, perche' il programma deve sapere quanti elementi contiene una riga, poiche' tutti gli elementi sono posizionati consecutivamente in memoria, quindi se tu gli dice di accedere a matrice[1][0] questo deve sapere quanti elementi deve saltare (in questo caso un numero pari al numero di colonne) per restituirti l'elemento che vuoi...altrimenti non avrebbe altro modo per rintracciarlo.

se vuoi puoi usare char *matrice[] oppure char **matrice.

Scusa se sono stato poco chiaro ma e' una certa ora.... :)

Isildur84
25-02-2005, 08:30
Grazie mille sei stato chiarissimo. Ho risolto e sono riuscito a compilarlo. Ciao.