#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
int main()
{
char name[100];
int key;
printf("enter plaintext:\n");
fgets(name, 100, stdin);
int length = sizeof(name);
printf("please enter key:");
scanf("%d", &key);
printf("plain text: %s\n", name);
printf("ciphertext:");
for (int i = 0; i < length; i++) {
if (name[i] >= 65 && name[i] <= 90) {
int c = (int)(name[i] - 'A');
char d = 'A' + (char)((c + key) % 26);
printf("%c", d);
}
else if (name[i] >= 97 && name[i] <= 122) {
int c = (int)(name[i] - 'a');
char d = 'a' + (char)((c + key) % 26);
printf("%c", d);
}
else
printf("%c", name[i]);
}
return 0;
}
Bonjour, C'est donc un exercice que j'ai essayé de résoudre au cours « CS50 » par Harvard. Il est un chiffre Ceasar, il faut une chaîne, une clé, et imprime le chiffrement: c = (pi + k)% 26lettres ordures imprime visuels - César chiffre excercise
c - la lettre finale déchiffré pi = la position de la lettre (a = 0. b = 1 ..) k = la clé
Mon programme donne la sortie à droite, mais les dernières impressions de lignes de caractères ordures:
Je pensais que c'était parce que l'allocation de mémoire? Mais je ne l'ai pas encore touché, et je ne veux pas utiliser le paquetage cs50.h parce que je veux apprendre c tel qu'il est, et ne pas utiliser les variables "chaînes" comme ils le font.
Toute aide serait appréciée.
vous avez 'sizeof' octets dans votre tampon, mais'% s' initialise seulement autant d'octets qu'il lit. Au lieu de boucler jusqu'à 'longueur', bouclez seulement à' strlen (nom) '(et ajoutez' ') –