Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Numero di dichiarazioni a tempo di esecuzione
Forum - C/C++ - Numero di dichiarazioni a tempo di esecuzione

Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 2:24
Venerdì, 30/10/2020
Salve,
dovrei creare un qualcosa del genere:

Codice sorgente - presumibilmente C++

  1. int n;
  2.  
  3. printf("Inserisci un intero:");
  4. scanf("%d", &n);
  5.  
  6. int var_1;
  7. int var_2;
  8. ...
  9. int var_n;



Come posso fare, dato che le dichiarazioni vanno messe prima dei comandi?

Ultima modifica effettuata da Godrek il 30/10/2020 alle 2:28
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 8:34
Venerdì, 30/10/2020
Puoi dichiarare var come puntatore a int, poi allocare con malloc() o con calloc() un array di int di dimensioni n.

Ad esempio...

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main() {
  5.     int *var = NULL;
  6.     int n;
  7.  
  8.     printf( "Inserisci un intero: " );
  9.     scanf( "%d", &n );
  10.  
  11.     var = calloc( n, sizeof(int) );
  12.  
  13.     if( NULL != var ) {
  14.         printf( "Array di %d elementi correttamente allocato.\n", n );
  15.  
  16.         // fai quel che ti serve con l'array di int
  17.  
  18.         // quando non ti serve piu', libera la
  19.         // memoria allocata (e' bene anche annullare
  20.         // i puntatori quando non sono piu' validi)
  21.         free( var ); var = NULL;
  22.         printf( "Array di %d elementi deallocato.\n", n );
  23.     }
  24.     else {
  25.         // se c'e' stato un errore l'array non
  26.         // e' stato allocato e non puoi usarlo
  27.         printf( "Array di %d elementi non allocato.\n", n );
  28.     }
  29.  
  30.     return 0;
  31. }


Ultima modifica effettuata da AldoBaldo il 30/10/2020 alle 8:48


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 10:19
Venerdì, 30/10/2020
Un'alternativa, nel caso non sapessi usare malloc() e compagnia bella, potrebbe essere prevedere una quantità massima di elementi. Tipo...

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX_VALORI  128 // 128 e' un valore arbitrario
  5.  
  6. int main() {
  7.     int var[MAX_VALORI];
  8.     int n = 0;
  9.  
  10.     while( n<1 || n>MAX_VALORI ) {
  11.         printf( "Inserisci un intero compreso tra 1 e %d: ", MAX_VALORI );
  12.         scanf( "%d", &n );
  13.  
  14.         if( n>0 && n<=MAX_VALORI ) {
  15.             printf( "Array di %d elementi disponibile.\n", n );
  16.  
  17.             // fai quel che ti serve con i
  18.             // primi n elementi dell'array di int
  19.         }
  20.         else {
  21.             // non puoi usare l'array se la quantita'
  22.             // di elementi richiesti non e' compatibile
  23.             // con le dimensioni previste
  24.            
  25.             printf( "Impossibile impiegare un array di %d elementi.\n\n", n );
  26.         }
  27.     }
  28.  
  29.     return 0;
  30. }



ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6381
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:44
Venerdì, 30/10/2020
Godrek ma li hai studiati gli array?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 10:36
Domenica, 01/11/2020
Ormai sono "diversamente giovane" e i modelli di comportamento tra i quali sono cresciuto si son fatti obsoleti. Ricordo anni nei quali era considerato normale interagire con coloro ai quali si ponevano domande alle quali si otteneva risposta, e salutare (magari ringraziando) prima di andarsene. Quando si comincia a pensare "ah, bei tempi!"... è allora che ci si accorge di esser vecchi.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:57
Domenica, 01/11/2020
Testo quotato

Postato originariamente da AldoBaldo:

Ormai sono "diversamente giovane" e i modelli di comportamento tra i quali sono cresciuto si son fatti obsoleti. Ricordo anni nei quali era considerato normale interagire con coloro ai quali si ponevano domande alle quali si otteneva risposta, e salutare (magari ringraziando) prima di andarsene. Quando si comincia a pensare "ah, bei tempi!"... è allora che ci si accorge di esser vecchi.


Non disperare c'è sempre qualcuno che guarda, ieri, oggi e sopratutto domani....
Ogni tanto leggo di C, ma con il tuo esempio, finalmente mi sono deciso a verificare e toccare con mano calloc e malloc, che forza!!!
Ma il C è terribile ogni cosa che capisci schiude altre decine di incognite.


in programmazione tutto è permesso
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 23:43
Domenica, 01/11/2020
Grazie Carlo. Si vede che sei anche tu di una generazione valorizzata dal trascorrere del tempo. (intende essere un complimento, con una strizzatina d'occhio)


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6381
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:38
Lunedì, 02/11/2020
Il C è il primo linguaggio che un futuro programmatore dovrebbe imparare. E intendo non solo come "sintassi" o potenzialità della libreria ma "nel profondo" del suo rapporto con la macchina.

La cosa migliore sarebbe farlo in parallelo con l'Assembly (intendo il "linguaggio macchina"), magari prima quelli più semplici, poi quelli più complessi, che vanno *di pari passo* con il C.

Alla fine di questo processo, si è fatta 3/4 di strada per il lavoro nel mondo della programmazione e dell'informatica.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote