Речь идет о реализации кода Цезаря-шифра для шифрования ввода, предоставленного пользователем - PullRequest
0 голосов
/ 09 февраля 2019

Код принимает ввод (строку) для кодирования и ключ от пользователя, так что при добавлении ключа к входу ввод увеличивается на величину данного ключа.Напримересли клавиша 2, то вход A меняется на C, b меняется на d и так далее.

Я написал код для того же, но не могу получить вывод.

int main()
{
  int x,i,y,c;
  char text[20];

  printf("enter the plaintext:");
  gets(text);
  printf("enter the key: ");
  scanf("%d",&x);
  for (y=0;y<strlen(text);y++)
  {
    if (text[i]>='a'&&text[i]<='z'&&text[i]>='A'&&text[i]<='Z' )
    {
      int c=(int)text[i]+x;
      printf("%c\n",text[i]);
    }
  }
}

Результат, который я получаю, пуст.пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

В вашем предложении много проблем, необходимо проверить успешность ввода, вы итерируете y , а не i , вы вычисляете новый код символа, ноВы не печатаете его

Вот исправленное предложение:

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

int main()
{
  char text[100];

  printf("enter the plaintext:");

  if (fgets(text, sizeof(text), stdin) != NULL) {
    int key;

    printf("enter the key: ");
    if (scanf("%d", &key) == 1) {
      int i;

      for (i=0; text[i] != 0; ++i)
      {
       if (isalpha(text[i]))
         putchar(text[i] + key); /* may not be printable */
       else
         putchar(text[i]);
      }
    }
  }
  return 0;
}

Компиляция и выполнение:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:the sentence to encode
enter the key: 3
wkh vhqwhqfh wr hqfrgh
pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:Alea jacta est
enter the key: 2
Cngc lcevc guv

Для забавы, 32 не очень хороший ключ ккодировать заглавные буквы:

pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:THE FIVE BOXING WIZARDS JUMP QUICKLY.
enter the key: 32
the five boxing wizards jump quickly.
0 голосов
/ 09 февраля 2019

Вы инициализировали переменную y вместо i переменная
попробуйте это:

для (i = 0; i

Примечание:
если вы компилируете свой код со следующими флагами -Wall -Wextra -Werror, это поможет вам узнать больше об ошибках, которые выможет иметь, как неиспользуемая переменная.
пример: gcc -Wall -Werror -Wextra youprogram.c -o output

у вас есть другие ошибки, не только эта,
, поэтому я предлагаю вам свое решениек вашей проблеме: (все выходные символы будут напечатаны)

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

int     main(void)
{
    char    text[250];
    size_t  i;
    int     key;

    printf("Enter the plaintext : ");
    if (fgets(text, sizeof(text), stdin) != NULL)
    {
            printf("Enter the key : ");
            scanf("%d", &key);
            for(i = 0; i < strlen(text); i++)
            {
                    if (text[i] >= 'a' && text[i] <= 'z')
                            putchar((((text[i] - 'a') + key) % 26) + 'a');
                    else if (text[i] >= 'A' && text[i] <= 'Z')
                            putchar((((text[i] - 'A') + key) % 26) + 'A');
                    else
                            putchar(text[i]);
            }
    }
    return (0);
}
...