Problema con programma in C

di il
14 risposte

Problema con programma in C

Ho un problema con un programma in C;
Il programma dice: inserire un valore intero N, per poi inserire un valore intero N volte e visualizare i valori inseriti al contrario;
Ho scritto il codice ma il programma crasha subito;
Qui sotto metto il codice [CODE] #include<stdio.h> int main() { int n , a[n], i = n; scanf("Inserisci il totale di numeri che vuoi inserire:%d", &n); n++; for(i = 0;i < n; i++) { scanf("Inserisci il %d° numero:%d", i , a[i]); } i = n; for(i = n--;i > 0; i--) { printf("%d\n", a[i]); } return 0; } Spero mi possiate aiutare grazie!!

14 Risposte

  • Re: Problema con programma in C

    Stai dicendo al compilatore di creare un array a fatto di n elementi, con n ignoto. Tu al suo posto cosa faresti?
  • Re: Problema con programma in C

    Non ti è chiaro che le istruzioni sono eseguite in sequenza.

    Prima devi fare l'input e dopo creare il vettore, non al contrario.

    E poi perché n++ ? Perché i = n ?
  • Re: Problema con programma in C

    L'ho riscritto così va bene?: [CODE] #include<stdio.h> int main() { int n, i; scanf("Inserire il totale di valori da inserire:%d", &n); int a[n]; for(i = 0;i < n; i ++); { scanf("Inserisci il %d° numero:%d", &i, &a[n]); } for(i = n;i > 0;i--) { printf("\n%d", a[n]); } return 0; } [/CODE
  • Re: Problema con programma in C

    Ma se va bene tu non lo sai? L'hai compilato? Provato?

    Perché &a[n] ??
  • Re: Problema con programma in C

    Matteo Maddalena ha scritto:


    Ho un problema con un programma in C;
    Il programma dice: inserire un valore intero N, per poi inserire un valore intero N volte e visualizare i valori inseriti al contrario;
    Ho scritto il codice ma il programma crasha subito;
    Qui sotto metto il codice [CODE] #include<stdio.h> int main() { int n , a[n], i = n; scanf("Inserisci il totale di numeri che vuoi inserire:%d", &n); n++; for(i = 0;i < n; i++) { scanf("Inserisci il %d° numero:%d", i , a[i]); } i = n; for(i = n--;i > 0; i--) { printf("%d\n", a[i]); } return 0; } Spero mi possiate aiutare grazie!!
    Ci sono errori (anche molto gravi) nell'uso delle funzioni scanf e printf... noto una grandissima confusione e ti consiglio VIVAMENTE di ripassarle...
    Comunque... il codice corretto te lo lascio qui sotto, ho inserito dei commenti in modo che tu possa capire gli errori commessi:
    
    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
        int n , i;
        int*a;/*per questo esercizio meglio usare un array dinamico in modo da non avere limitazioni di lettura*/
        
    
        printf("Inserisci il totale di numeri che vuoi inserire:");/*si usa la printf per effettuare prompt a schermo e non scanf che serve solo per la lettura delle variabili*/
    	scanf("%d",&n);/*si legge la variabile con l'operatore di indirizzo che precede il nome della variabile, l'operatore è &*/
    	a=malloc(n*sizeof(int));/*allocazione array dinamico*/
    	for(i = 0;i < n; i++)
        {
        	printf("\nInserire il numero (%d):",i);
            scanf("%d" ,&a[i]);/*idem prima prompt e poi lettura con operatore di indirizzo*/
        }
    
        for(i = n-1 ;i>=0; i--)
        printf("\n%d", a[i]);
    
        return 0;
    
    }
    
    PS. Ho usato l'array dinamico, poichè facendo una dichiarazione top level di array statico come: a[n], possono verificarsi errori di lettura all'interno del for.
  • Re: Problema con programma in C

    Luca Morazzano ha scritto:


    PS. Ho usato l'array dinamico, poichè facendo una dichiarazione top level di array statico come: a[n], possono verificarsi errori di lettura all'interno del for.
    Che vuoi dire?
  • Re: Problema con programma in C

    oregon ha scritto:


    Luca Morazzano ha scritto:


    PS. Ho usato l'array dinamico, poichè facendo una dichiarazione top level di array statico come: a[n], possono verificarsi errori di lettura all'interno del for.
    Che vuoi dire?
    Vuol dire che la sua lunghezza/dimensione varia durante l'esecuzione del programma e non viene stabilita a priori(cosa comunque giusta ma che nel caso del tuo esercizio potrebbe causare errori)
  • Re: Problema con programma in C

    Beh anche malloc(n*sizeof(int)) varia con n e potrebbe fallire restituendoti un puntatore a NULL, mica è infinito lo heap
  • Re: Problema con programma in C

    Weierstrass ha scritto:


    Beh anche malloc(n*sizeof(int)) varia con n e potrebbe fallire restituendoti un puntatore a NULL, mica è infinito lo heap
    Però nel primo caso il vettore viene inizializzato di lunghezza n senza conoscere il valore di questa, mentre nel secondo caso della malloc, il vettore viene allocato dopo aver letto il valore di n, ovvero nella fase di esecuzione.
  • Re: Problema con programma in C

    Luca Morazzano ha scritto:


    Vuol dire che la sua lunghezza/dimensione varia durante l'esecuzione del programma e non viene stabilita a priori(cosa comunque giusta ma che nel caso del tuo esercizio potrebbe causare errori)
    Intanto non è un mio esercizio.

    In secondo luogo, non ti sei ancora spiegato dato che prima hai parlato di array statico.
    Di quale array statico parliamo? In questo esercizio non ci sono. Forse intendevi un VLA ?
    ovvero nella fase di esecuzione.
    Stiamo parlando unicamente di fare di esecuzione.

    L'unico problema del codice (sbagliato) iniziale è il fatto che la variabile n non ha un valore definito nel momento in cui viene allocato il VLA.
  • Re: Problema con programma in C

    Cmq ho risolto da solo, grazie
  • Re: Problema con programma in C

    Risolto da solo? Dopo che hai avuto mille risposte e indicazioni?
  • Re: Problema con programma in C

    No, risolto da solo senza leggere i vostri consigli, visto che non ricevevo risposte ho deciso di farlo da solo e l'ho fatto;
    Poi ho aperto il forum ed'è scoppiato il macello
  • Re: Problema con programma in C

    Metto il codice giusto qui: [CODE] #include<stdio.h> int main() { int n,i; do { printf("Inserisi il totale di valori da inserire:"); scanf("%d", &n); } while(n <= 0); int a[n]; for(i = 0; i < n;i++) { printf("Inserisi il %d° valore:", i + 1); scanf("%d", &a[i]); } for(i = n - 1;i > 0;i--) { printf("\n%d", a[i]); } return 0; }
Devi accedere o registrarti per scrivere nel forum
14 risposte