Почему этот код возвращает ненужные значения вместе с правильным выводом? - PullRequest
0 голосов
/ 22 апреля 2020

Я писал программу, которая действовала бы как кодировщик Цезаря Шифра. Однако для ввода только одной буквы зашифрованный символ иногда возвращается вместе с символами нежелательной почты.

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

int check_validity(string);
int atoi(string);
void cipher(int ,string, int);


int main(int argc, string argv[])
{
     if(argc == 2)
     {
          check_validity(argv[1]);
          if(check_validity(argv[1]) == 0)
          {
               string c = get_string("plaintext: ");
               int key = atoi(argv[1]);
               int cipher_key = key%26;
               int length = strlen(c);
               cipher(cipher_key, c, length);
               return 0;
          }
          else printf("Usage: ./caesar key\n");
      }
      else 
      {
          printf("Usage: ./caesar key\n");
          return 1;
      }
}

int check_validity(string w)
{
    int j = 0;
    string a;
    for(int i = 0;w[i] != 0; i++)
    {
         if(w[i]<47 || w[i]>58)
         {
              j++;
         }
     }
     return j;

}

int atoi(string w)
{
     int number = 0;
     for (int i = 0; w[i] != 0; i++)
     {
         number = number*10 + (w[i]-'0');
     }
     return number;
 }

 void cipher(int x, string q, int l)
 {
     char b[l];
     for(int i=0; q[i] != 0; i++)
     {
          if(q[i]>64 && q[i]<91)
          {
               if(q[i]<91-x)
               {
                    b[i] = q[i] + x;
               }
           else b[i] = q[i] + x - 26;
           }
           else if(q[i]>96 && q[i]<123)
           {
                if(q[i]<123-x)
                {
                    b[i] = q[i] + x;
                }
                else b[i] = q[i] + x - 26;
           }
           else b[i] = q[i];
           }
           printf("ciphertext: %s\n",b);
}

Ввод: ./caesar 1, открытый текст: a

Выход 1: b

Выход 2: b>

Выход 3: b2

При смене ключа возникает та же проблема. Однако, похоже, что это отсутствует для всех других введенных строк букв.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...