2010-10-01 3 views
0

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

коды выглядеть, но имеют случайные числа/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; 

} 
    }; 

ответ

4

Вы не завершения encrypted строку правильно.

Понадобится:

  1. Чтобы убедиться, что у вас есть комната для завершающего характера, с помощью char encrypted[len + 1];.
  2. encrypted[len] = '\0'; после цикла.
+0

Большое спасибо за ваш ввод, он, наконец, работает сейчас! Я понимаю бит о том, чтобы оставить пространство для завершающего символа, но то, что делает вторая часть, - это «\ 0» магия для завершающего символа, который затем помещается в конец строки, используя [len], когда строки начинаются с 0. Вправо ? – joewoodward

 Смежные вопросы

  • Нет связанных вопросов^_^