Aiuto programma in C

di il
2 risposte

Aiuto programma in C

Salve a tutti avrei bisogno di una mano su questo programma in C il programma servirebbe per invertire i numeri di un array utilizzando due funzioni. Grazie in anticipo per il vostro aiuto
#include <stdio.h>
void scambio(int *a,int *b);
void inverti(int x[],int n);

int main() {
int n=0;
int array[50];
int i=0;
printf("Inserisci di quanti valori dev'essere l'array\n");
scanf ("%d",&n);
for (i=1; i<=n; i++){
    printf("\nInserisci il %d valore: ",i);
    scanf("%d",&array[i]);
}
inverti (array,n);
for (i=0;i<n;i++){
    printf("%d",array[i]);
}
system("PAUSE");
}

void scambio (int *a,int *b){
     int contenitore= *a;
     *a = *b;
     *b = contenitore;
}     
void inverti (int x[],int n){
     int i=0;
     for (i=0;i<=n-i-1;i++){
     scambio(&x[i],&x[n-i-1]);     
}
}

2 Risposte

  • Re: Aiuto programma in C

    Ciao, il problema è nell'acquisizione dell'array:
    
    for (i=1; i<=n; i++){
        printf("\nInserisci il %d valore: ",i);
        scanf("%d",&array[i]);
    }
    
    In particolare gli indici degli array iniziano da zero, non da uno. Per cui questo codice lascia "vuota" la prima cella (che, in realtà, sarà popolata da un valore casuale), e "sborda" di uno, cioè inserisce l'ultimo elemento nella cella di memoria immediatamente fuori dall'array, cosa che potrebbe causarti fra l'altro un segmentation fault.
    Di conseguenza ti basta sistemare quel codice e dovrebbe funzionare tutto.
  • Re: Aiuto programma in C

    Della ha scritto:


    Ciao, il problema è nell'acquisizione dell'array:
    
    for (i=1; i<=n; i++){
        printf("\nInserisci il %d valore: ",i);
        scanf("%d",&array[i]);
    }
    
    In particolare gli indici degli array iniziano da zero, non da uno. Per cui questo codice lascia "vuota" la prima cella (che, in realtà, sarà popolata da un valore casuale), e "sborda" di uno, cioè inserisce l'ultimo elemento nella cella di memoria immediatamente fuori dall'array, cosa che potrebbe causarti fra l'altro un segmentation fault.
    Di conseguenza ti basta sistemare quel codice e dovrebbe funzionare tutto.
    Grazie mille per l'aiuto! L'errore era proprio quello! Non ci posso credere ho utilizzato puntatori e funzioni e mi vado a perdere per un errore del genere per la quale stavo diventando pazzo! ahahaha
Devi accedere o registrarti per scrivere nel forum
2 risposte