Странные нежелательные тризначные распечатки кода из Caesar Chipher

StackOverflow https://stackoverflow.com/questions/3838238

  •  27-09-2019
  •  | 
  •  

Вопрос

Код шифрования на самом деле работает; Просто я получаю несколько странных трехзначных кодов, разделенных с косаями. Любая помощь будет очень ценится. Вот мой код.

Коды выглядят так, но имеют случайные номера / 354/233 / 645 / 810/236

    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "cs50.h"

    int i, len;
    string sentance, encrypted;
    int k, argvLen;

    int caesar (int k){

 printf("Hi I'm Ceaser! What would you like me to cipher?\n");

 sentance = GetString();
 len = strlen(sentance);
 char encrypted[len];

     for (i=0; i<len; i++) {
 if (sentance[i] >='a' && sentance[i] <='z') {
  encrypted[i] = ((sentance[i] - 'a' + k) % 26) + 'a';

  }
 else if (sentance[i] >='A' && sentance[i] <='Z') {
  encrypted[i] = ((sentance[i] - 'A' + k) % 26) + 'A';

     }
 else if (sentance[i] >=' ' && sentance[i] <= '@'){
  encrypted[i] = sentance[i];
 }

 }


 printf("%s", encrypted);
 return 0;
    };


    int main (int argc, const char * argv[]) {

 if (argc==2) {
  k = atoi(argv[1]);
  argvLen = strlen(argv[1]);
  for (i=0; i<argvLen; i++){
   if (isdigit(argv[1][i])){   
   caesar(k);
      }
   else {
   printf("please enter a number for the key!");
   return 1;
   }

     }

    return 0;

 }
    };
Это было полезно?

Решение

Вы не прекращаете encrypted строка правильно.

Тебе нужно:

  1. Убедитесь, что у вас есть место для завершения характера, используя char encrypted[len + 1];.
  2. encrypted[len] = '\0'; после цикла.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top