Oppure

Loading
30/10/20 1:24
Godrek
Salve,
dovrei creare un qualcosa del genere:

int n;

printf("Inserisci un intero:");
scanf("%d", &n);

int var_1;
int var_2;
...
int var_n;



Come posso fare, dato che le dichiarazioni vanno messe prima dei comandi?
Ultima modifica effettuata da Godrek 30/10/20 1:28
aaa
30/10/20 7:34
AldoBaldo
Puoi dichiarare var come puntatore a int, poi allocare con malloc() o con calloc() un array di int di dimensioni n.

Ad esempio...

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *var = NULL;
    int n;

    printf( "Inserisci un intero: " );
    scanf( "%d", &n );

    var = calloc( n, sizeof(int) );

    if( NULL != var ) {
        printf( "Array di %d elementi correttamente allocato.\n", n );

        // fai quel che ti serve con l'array di int

        // quando non ti serve piu', libera la
        // memoria allocata (e' bene anche annullare
        // i puntatori quando non sono piu' validi)
        free( var ); var = NULL;
        printf( "Array di %d elementi deallocato.\n", n );
    }
    else {
        // se c'e' stato un errore l'array non
        // e' stato allocato e non puoi usarlo
        printf( "Array di %d elementi non allocato.\n", n );
    }

    return 0;
}
Ultima modifica effettuata da AldoBaldo 30/10/20 7: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.
30/10/20 9:19
AldoBaldo
Un'alternativa, nel caso non sapessi usare malloc() e compagnia bella, potrebbe essere prevedere una quantità massima di elementi. Tipo...

#include <stdio.h>
#include <stdlib.h>

#define MAX_VALORI  128 // 128 e' un valore arbitrario

int main() {
    int var[MAX_VALORI];
    int n = 0;

    while( n<1 || n>MAX_VALORI ) {
        printf( "Inserisci un intero compreso tra 1 e %d: ", MAX_VALORI );
        scanf( "%d", &n );

        if( n>0 && n<=MAX_VALORI ) {
            printf( "Array di %d elementi disponibile.\n", n );

            // fai quel che ti serve con i
            // primi n elementi dell'array di int
        }
        else {
            // non puoi usare l'array se la quantita'
            // di elementi richiesti non e' compatibile
            // con le dimensioni previste
            
            printf( "Impossibile impiegare un array di %d elementi.\n\n", n );
        }
    }

    return 0;
}
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.
30/10/20 17:44
nessuno
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à.
01/11/20 9:36
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.
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.
01/11/20 20:57
Carlo
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
01/11/20 22:43
AldoBaldo
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.
02/11/20 15:38
nessuno
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à.