|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2003
Città: Pianeta Terra
Messaggi: 281
|
INPUT DA TASTIERA DI UN ARRAY2D
RAGAZZI DEVO SCRIVERE UN PROGRAMMA CHE CON DEGLI INPUT DA TASTIERA DEFINISCA UN ARRAY2D
DOVE SBAGLIO??? ![]() #include <stdio.h> void main () { int righe; int colonne; int i; int l; int matrice[1][1]; int x; printf ("INSERIRE IL NUMERO DI RIGHE DELLA MATRICE\n"); scanf ("%d",&righe); printf ("INSERIRE IL NUMERO DI COLONNE DELLA MATRICE\n"); scanf ("%d",&colonne); matrice[1][1] = matrice[righe][colonne]; /* INSERIMENTO DATI DELLA MATRICE */ for (i=0;i<righe;i++) { for (l=0;l<colonne;l++) { printf ("DATO NUMERO %d DELLA RIGA NUMERO %d\n",l+1,i+1); scanf ("%d", &x); matrice[i][l] = x; } } /* STAMPA DELLA MATRICE */ for (i=0;i<=righe;i++) { for (l=0;l<=colonne;l++) { printf ("%d ", matrice[i][l]); } printf ("\n"); } } AIUTO!!!!
__________________
LE AVVENTURE DI AL METALLER E CHELA FDM - IL FOTOROMANZO TRASH! When I'm walking a dark road... I am a man who walks alone... Ultima modifica di xber-gigi : 18-01-2004 alle 18:35. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
tu non puoi fare questo per cambiare la dimensione della matrice
Codice:
matrice[1][1] = matrice[righe][colonne]; Codice:
int matrice[righe][colonne]; |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2003
Città: Pianeta Terra
Messaggi: 281
|
non funge!
mi dice array2d.c(14) : error C2143: syntax error : missing ';' before 'type'
__________________
LE AVVENTURE DI AL METALLER E CHELA FDM - IL FOTOROMANZO TRASH! When I'm walking a dark road... I am a man who walks alone... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
non è possibile allocare una matrice dinamicamente in quel modo
per allocarla dinamicamente dovete usare una malloc, ricordandosi poi di fare una free alla fine Codice:
int i = 0; int nrow = 0; int ncol = 0; /* mi carico nrow e ncol */ int** mat = (int**)malloc(nrow); for(; i < nrow; i++) mat[i] = (int*)malloc(ncol); /* mi ci faccio i miei pastrocchi */ i = 0; for(; i < nrow; i++) free(mat[i]); free mat; ![]() EDIT: l'esempio sopra riportato presume l'utilizzo del C in caso di C++ usare new e delete inoltre non fa nessun controllo sulla corretta esecuzione della malloc per 2 motivi: 1 non avevo voglia, 2 (che è proprio una scusa ![]() ![]() Ultima modifica di ri : 19-01-2004 alle 07:56. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
no no, guarda che il c99 permette di allocare un array di dimensioni variabili (cioè che dipendono da una variabile che assume dei valori in runtime). per quanto riguarda quell'errore dice che hai dimenticato un ; alla riga 14 controlla un po'!!
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
non ho dimenticato nessun ;
ho messo un + di troppo invece ^^ oh avevo sonno ^^' questa cosa del nuovo standard 99 non la sapevo ma dubito che in ambito scolastico (universitario e non) si faccia riferimento all'ultimo standard, anzi ![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ad occhio il codice di Vegeta SSJ5 non va bene...
Codice:
#include <stdio.h> int main(void) { int a = 10; char array[a]; printf("Dimensione array = %d\n", sizeof(array)); printf(" Inserisci dimensione array: "); scanf("%d", &a); printf("Dimensione array = %d\n", sizeof(array)); exit(0); } In C99 si possono allocare array di dimensione non const...ma l'unico modo per usarli in maniera dinamica è fare una funzione che li alloca e li usa al tempo stesso...ma non sranno mai accessibili dall'esterno... In pratica la variaible usata per dimensionare l'array deve essere definita prima delal dichiarazione dell'array...e visto che tutte le dichiarazione devono essere fatte tutte subito dopo l'intestazione della funzione (a parte le nuove variabili automatiche nei cicli for) ci sono solo due modi: - dichiarare e inizializzare la variabile passata come dimensione dell'array prima della dichiarazione dell'array (come fatto nel codice precedente) - usare un parametro della funzione per dimensionare l'array Per il secondo metodo: Codice:
void f(int a) { int array[a]; printf("Dimensione array = %d\n", sizeof(array)); //come vedete array può esistere solamente qui dentro... } int main(void) { int a; printf(" Inserisci dimensione array: "); scanf("%d", &a); f(a); return 0; } |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ci provavo con static...ma che testa... Le variabili dichiarate come static vengono create prima dell'esecuzione del programma quindi non è possibile rendere static un array co dimensione variabile...
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
scusa Cionci, ma il modo che ho detto io che ha di brutto?
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Niente contro il tuo metodo...anzi... E' lo stesso che avrei usato io
![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
ah mi pareva
![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jun 2003
Città: Pianeta Terra
Messaggi: 281
|
Mi sa proprio che in C bisogna per forza specificare la grandezza di un array con delle costanti!
__________________
LE AVVENTURE DI AL METALLER E CHELA FDM - IL FOTOROMANZO TRASH! When I'm walking a dark road... I am a man who walks alone... |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
se fai un'allocazione statica di una matrice, col C che conosco io (non il 99) devi per forza farlo con delle costanti, e l'unico modo per allocarla dinamicamente è fare come ho scritto prima
poi non so se i nuovi standard hanno introdotto delle modifiche... |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
Quote:
Codice:
#include <stdio.h> int main(void) { int a,k; printf(" Inserisci dimensione array: "); scanf("%d", &a); char array[a]; printf("Dimensione array = %d\n", sizeof(array)); /* e l'array funziona .. */ for ( k=0; k<a; k++ ) array[k]=-k; for ( k=0; k<a; k++ ) printf ( "elemento %i = %d\n" , k, array[k]); return 0; } In questo caso ho avuto andare contro la "regola" di dichiarare tutte le variabili all'inizio del main ma forse in C99 questa regola non c'è.
__________________
powered by GNU/Linux [ Debian Sid ] |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:11.