Oi gente, boa noite, tudo bem? Eu preciso fazer um programa que leia uma frase e que em seguida cada letra do texto seja substituída por outra fazendo uma troca de 3 posições. Por exemplo: a letra A vira letra D, a letra B vira letra E e assim por diante. O problema é que o programa que eu construí ela lê apenas uma palavra mas não lê o resto que eu escrevo. Por exemplo: quando eu escrevo a palavra "CACHORRO CANSADO" o programa lê apenas a palavra "CACHORRO" e me retorna "FDFKRUUR" mas não lê a palavra "CANSADO", o programa considera apenas a primeira palavra que eu escrevo, por que isso está acontecendo? Como posso resolver esse problema?
Eu escrevi o programa da seguinte forma:
#include <stdio.h>
#include <string.h>
void cifrar( char * saida, const char * entrada, int chave )
{
int i = 0;
int tam = strlen(entrada);
for( i = 0; i <= tam; i++ )
{
if( (entrada[i] >= 'a') && (entrada[i] <= 'z') )
{
saida[i] = (((entrada[i] - 'a') + chave) % 26) + 'a';
}
else if( (entrada[i] >= 'A') && (entrada[i] <= 'Z') )
{
saida[i] = (((entrada[i] - 'A') + chave) % 26) + 'A';
}
else
{
saida[i] = entrada[i];
}
}
}
void decifrar( char * saida, const char * entrada, int chave )
{
int ch = 0;
int i = 0;
int tam = strlen(entrada);
for( i = 0; i <= tam; i++ )
{
if( (entrada[i] >= 'a') && (entrada[i] <= 'z') )
{
ch = (entrada[i] - 'a') - chave;
if( ch < 0 ) ch += 26;
saida[i] = ch + 'a';
}
else if( (entrada[i] >= 'A') && (entrada[i] <= 'Z') )
{
ch = (entrada[i] - 'A') - chave;
if( ch < 0 ) ch += 26;
saida[i] = ch + 'A';
}
else
{
saida[i] = entrada[i];
}
}
}
int main( int argc, char * argv[] )
{
char original[100];
scanf("%s", original);
char cifrado[100];
cifrar( cifrado, original, 3 );
printf("%s", cifrado);
return 0;