Dichiarazione matrice

di clood il
11 risposte

Salve a tutti sono nuovo di questo forum come lo sono del linguaggio , per cui siate clementi :-)

Stavo provando questo semplice listato che chiede in ingresso dei valori per “riempire ” la matrice. Vorrei sapere come mai la dichiarazione della matrice “int vett[maxr][maxc];”( 8# riga) la lascio li dov'è, il programma funziona.Se invece, la metto insieme alle altre dichiarazioni delle variabili, (4° rigra) l'eseguzione si blocca.
Grazie a chiunque vorrà rispondermi.

Buona giornata

#include  se la dichiarazione della matrice<stdio.h>
main() {
	int maxr, maxc,r,c,posr,posc;
	printf ("inserisci valore max riga:");
	scanf("%d", &maxr);
	printf("inserisci valore max colonna:");
	scanf("%d", &maxc);
	int vett[maxr][maxc];

	for (r=0; r<maxr; ++r){
		for(c=0; c<maxc;++c){
		printf("inserisci valore %d riga, %d colonna",r,c);
		scanf("%d", &vett[r][c]);
		}
	}

	printf("quali riga vuoi modificare");
	scanf("%d",&posr);
	printf("quali colonna vuoi modificare");
	scanf("%d", &posc);
    printf("inserisci il nuovo valore della cella %d%-%d",r,c);
    scanf("%d", &vett[posr][posc]);	
}

11 Risposte

  • Ciao, quanto vale maxr e maxc in questo caso?

    #include <stdio.h>
    
    int main() 
    {
    	int maxr, maxc, vett[maxr][maxc];
    	...


    P.S.
    Lo sai che nel tuo caso vett non è un array statico ma un VLA?

  • Ciao Nippolo, perdona la mia ignoranza …ma cosacentrano gli VLA (gli array con dimensione variabile) con il mio problema?

    Non essere cattivo con me !( come già detto sono una new entry )  :-) 

  • Ti ho solo fatto delle domande… non mi sembra di essere stato particolarmente “cattivo”!

    Peraltro hai risposto al mio P.S. e non alla domanda precedente che aveva appunto lo scopo di farti capire in modo autonomo dove fosse il problema col tuo codice. Provo quindi a riformularti la domanda: se scrivi

    int maxr, maxc, vett[maxr][maxc];

    la matrice vett dichiarata che dimensioni avrà?

  • No la mia era solo una battuta suggerita dall'indicazione sotto il tuo avatar.

    bhe , maxr e maxc sono di tipo int, tra 0 e 32767.

  • Hai modificato il codice del primo post?

  • Se le scrivi nella stessa riga sono eseguite in quel momento PRIMA delle scanf quindi il loro valore non può essere corretto. Capito? 

  • 21/01/2023 - oregon ha scritto:


    Se le scrivi nella stessa riga sono eseguite in quel momento PRIMA delle scanf quindi il loro valore non può essere corretto. Capito? 

    no, perdonami ma non ho capito.

    Una volta che dichiaro una variabile , il compilatore alloca dello spazio in memoria in funzione del tipo dichiarato.giusto?

    Vedo su internet e libri di testo dichiarare le variabili all' inizio del listato senza alcun problema.

    Non capisco perche nel mio caso mi genera problemi. 

    grazie

  • No, sbagliato. La alloca secondo il valore delle dimensioni nel momento in cui esegue la linea di codice.

    Se hai trovato questo tipo di codice con delle variabili (non costanti) è codice sbagliato.

    È corretto scrivere la linea dopo le scanf che valorizzano le variabili usate per le dimensioni, come hai fatto nel codice.

  • Ok grazie mille a tutti 

    buona giornata

  • A te, spero sia tutto chiaro

Devi accedere o registrarti per scrivere nel forum
11 risposte