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;
}