Этот код должен зашифровывать все строчные буквы и показывать сообщения об ошибках, если ввод отличается от строчных.Если Key
равно нулю, то ввод будет обратным.
Это работает хорошо, но когда дело доходит до пробелов, все идет не так.
Что должно появиться:
plain text: notverysecure thiscaeserwas
encrypted text: jkpranuoayqna pdeoywaoanswo
Что появляется:
plain text: notverysecure thiscaeserwas
encrypted text: abgirelfrpher guvfpnrfrejnf
Однако, если ввод:
plain text: notverysecurethiscaeserwas
encrypted text: jkpranuoayqnapdeoywaoanswo
Я предполагаю, что пространство используется для вычисления Key
, но мои попыткичтобы исправить это ничего не делают.
Мой вопрос состоит в том, чтобы заставить код читать пробелы во входных данных, но не привлекать их к каким-либо манипуляциям
Код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//*******************************************************************
// Function to reverse the input string
void rev (const char *const c)
{
if (*c)
{
rev (c + 1);
putchar (*c);
}
}
//*******************************************************************
int main (void)
{
char string[350];
int Key;
printf ("plain text: ");
fgets (string, sizeof (string), stdin);
Key = 256 % (strlen (string) - 1);
//***************************************************************
//ERROR CHECK
if (strlen (string) > 256)
{
printf ("[ERR] too many characters\n");
return -1;
}
for (int counter = 0; string[counter] != '\n'; counter++)
{
if ( !(islower (string[counter])) && string[counter] != ' ')
{
printf ("[ERR] invalid characters\n");
return -2;
}
//**************************************************************
int difference = 0, shift = 0;
for (int counter = 0; string[counter] != '\0'; counter++)
{
if (string[counter] >= 'a' && string[counter] <= 'z')
{
difference = 'z' - string[counter];
if (Key > difference)
{
shift = Key - (difference + 1);
string[counter] = 'a';
string[counter] += shift;
}
else
{
string[counter] += Key;
}
}
}
printf ("encrypted text: ");
if (Key == 0)
{
string[strlen(string) - 1] = '\0';
string[-1] = '\n';
rev (string);
return 0;
}
for (int counter = 0; string[counter] != '\0'; counter++)
{
printf ("%c", string[counter]);
}
}