Cifrario di Cesare semplificato [C]

di il
2 risposte

Cifrario di Cesare semplificato [C]

Salve ragazzi ho un problema con il seguente programma
E' una versione semplificata del cifrario di cesare che sto facendo giusto per esercizio(la traccia è allegata come commento).

Quello che voglio fare è,data una sequenza di caratteri e una chiave k,spostare di k posizioni in avanti il carattere considerando
il corrispondente codice ASCII. In questa versione le lettere vengono trasformate in qualsiasi carattere.

Il problema è che la "cifratura" avviene,ma alla fine della frase cifrata compaiono dei caratteri che non dovrebbero esserci e
non capisco proprio il motivo.Allego il codice


/*Scrivere un programma che legga (usando getchar) un testo da cifrare
* sotto forma di una sequenza di caratteri terminata da un punto
*,poi legga(utilizzando la scanf) la chiave di cifratura k e quindi stampi il
* testo cifrato
*
*
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{

    char messaggio[100],*ptr;
    int i,k;
    char carattere;



    ptr=messaggio;
    printf("\nInserisci il testo da cifrare,e per terminare un punto\n\n");

    i=0;
    while(1){
            *(ptr+i)=getchar();
            if(*(ptr+i)=='.')
                break;

        i++;
    }

    printf("\nInserisci la chiave di cifratura ");
    scanf("%d",&k);

    //Converto tutto in minuscolo

    for(i=0; *(ptr+i)!='\0';i++){
        *(ptr+i)=(tolower(*(ptr+i)));
    }

    //Questa è una versione semplificata

    for(i=0; *(ptr+i)!='\0';i++){
        if(*(ptr+i)!='.'){
        carattere=*(ptr+i);
        carattere +=k;
        printf("%c",carattere);}
    }


    //Mi stampa altri caratteri alla fine e non so perchè


    return 0;
}


2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte