trois indésirables étranges impressions de code à deux chiffres de chiffrement caesar
Question
Le code de chiffrement fonctionne réellement; il est juste que je reçois des codes à trois chiffres impairs séparés par des barres obliques aussi. Toute aide serait grandement appréciée. Voici mon code.
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;
}
};
La solution
Vous n'êtes pas mettre fin à la chaîne de encrypted
correctement.
Vous avez besoin:
- Pour vous assurer que vous avez la place pour le caractère de fin, en utilisant
char encrypted[len + 1];
. -
encrypted[len] = '\0';
après la boucle.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow