Mein Programm funktioniert nur für Großbuchstaben und ich kann das Problem nicht herausfinden. Alles scheint in Ordnung zu sein, aber das ist es tatsächlich nicht. Dies ist übrigens eine Aufgabe des CS50-Kurses (Woche 2). Hier ist mein Code:Die Caesar-Chiffre funktioniert nur für Großbuchstaben (CS50)
#include <stdio.h>
#include "cs50.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, string argv[])
{ /* Main should take only one parameter (except program execution, of course) */
if (argc != 2)
return 1;
string text = GetString(); // text to encrypt
int i, l = strlen(text);
int k = atoi(argv[1]); // shift value (key)
/* Shift value should be less or equal to 26 */
if (k > 26)
k = k % 26;
for (i = 0; i < l; i++)
{ /* Making sure the character to encrypt is a letter (from English alphabet) */
if ((islower(text[i])) || (isupper(text[i])))
{
if ((islower(text[i])) && ((text[i] + k) > 'z'))
text[i] = ('a' + text[i] + k - 'z' - 1);
if ((isupper(text[i])) && ((text[i] + k) > 'Z'))
text[i] = ('A' + text[i] + k - 'Z' - 1);
else
text[i] = text[i] + k;
}
printf("%c", text[i]);
}
printf("\n");
return 0;
}
Ergebnis
caesar.exe 13
HELLO WORLD hello world
URYYB JBEYQ uryyk sknyq
kann man auf den ersten –
Und dann die verschlüsselten Zeichen in Kleinbuchstaben verwenden 'toUpper' Funktion konvertieren:
Kann zu reduzieren? Natürlich wird es funktionieren, aber ich möchte herausfinden, warum mein Programm nicht funktioniert =) – PoorProgrammer
Die Logik in Ihren 'if' Anweisungen ist ein bisschen seltsam. Welche Buchstaben sind größer als 'z'? Sie könnten mehr Variablen verwenden, um Ihren Code zu vereinfachen. Du solltest "toupper" oder "tolower" nicht mehr als einmal pro Charakter aufrufen müssen. –