Semplice problema stringhe in C

di il
7 risposte

Semplice problema stringhe in C

Salve a tutti sono alle prime armi con il C. stavo provando a fare un semplice programmino che data una stringa ne inverte le cifre.
Ho scritto il seguente codice, che compila senza errori ma poi si blocca subito. Dove ho sbagliato? Grazie a tutti per l'aiuto

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

//prototipi delle funzioni
void inverti(char*s);
void swap(char *pa, char *pb);
int main()
{
    printf("Programma in c che inverte le cifre di un numero......!\n");
    printf("\n");
    char x[5];
    int i;
    printf("inserisci numero da invertire...\n");
    for(i=0;i<=4;++i)
    {
        scanf("%c",x[i]);
    }
    printf("\n");
    inverti(x);
    printf("numero invertito:\n \n");
    for(i=0;i<=4;++i)
    {
        printf("%c",x[i]);
    }

    return 0;
}

//implementazione delle funzioni
void swap(char *pa, char *pb) {
   int temp;

   temp = *pa;
   *pa = *pb;
   *pb = temp;
}


void inverti(char*s)
{
    int i=0;
    int j;
    j=strlen(s)-1;
    while(i<j)
    {
        swap(s[i],s[j]);
        i++;
        j--;
    }
}

7 Risposte

  • Re: Semplice problema stringhe in C

    C'è qualcuno??
  • Re: Semplice problema stringhe in C

    
    for(i=0;i<=4;++i) //controlla sta riga (1)
        {
            scanf("%c",x[i]); //e anche questa. (2)
        }
    
    
    j=strlen(s)-1; (3) //se metti a posto la riga (1) questa sarà OK.
    
    
    swap(s[i],s[j]); (4) // da controllare anche questa.
    
  • Re: Semplice problema stringhe in C

    Oddio mi scuso per l'ignoranza ma non riesco a capire cosa c'è che non va nel ciclo...
  • Re: Semplice problema stringhe in C

    Ho provato a mettere <4 invece di <=4 ma si blocca ugualmente
  • Re: Semplice problema stringhe in C

    Non devi scusarti. Te lo spiego.
    se tu hai una array di 5 caratteri e il tuo for va da 0 a 4 e quindi comprende anche il 5° elemento, significa che non hai lasciato spazio per il terminatore di stringa. Mi puoi dire: Ma non mi serve il terminatore, io leggo un carattere per volta. Il problema è nella funzione che ti calcola j, quella da me segnata con (3). strlen(char *) vuole il terminatore di stringa '\0' per darti la lunghezza. Se questa non c'è il risultato è indefinito.

    Il punto (2) credo che l'avrai messo a posto. Mancava & davanti a x.
    il punto (4) stai scambiando due char tra di loro ma la funzione accetta due puntatori a char, quindi anche qui devi mettere swap(&s,&s[j]);
  • Re: Semplice problema stringhe in C

    Quindi dovrei mettere i<=5 giusto?
  • Re: Semplice problema stringhe in C

    Devi mettere < 4 e dopo li ciclo terminare la stringa con '\0'.
    
    x[4] = '\0';
    
Devi accedere o registrarti per scrivere nel forum
7 risposte