2010-10-01 3 views
0

Le code chiffré fonctionne réellement; c'est juste que je reçois des codes à trois chiffres séparés séparés par des barres obliques. Toute aide serait grandement appréciée. Voici mon code.Étranges impressions de code à trois chiffres non désirées à partir du chiffrement César

Les codes ressembler à ceci mais ont des nombres aléatoires/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; 

} 
    }; 

Répondre

4

Vous n'êtes pas mettre fin à la chaîne encrypted correctement.

Vous devez:

  1. Pour vous assurer que vous avez la place pour le caractère de fin, en utilisant char encrypted[len + 1];.
  2. encrypted[len] = '\0'; après la boucle.
+0

Merci beaucoup pour votre contribution, cela fonctionne enfin maintenant! Je comprends le problème de laisser de l'espace pour le caractère final, mais ce que fait la partie 2, c'est la magie '\ 0' pour un caractère de fin, qui est placé à la fin de la chaîne en utilisant [len]. ? – joewoodward

Questions connexes