Caesars Code Hilfe
-
Hallo bin neu hier und ich habe ein Problem ich hoffe ihr könnt mir helfen.
Also ich soll ein Caesars code Programmieren.
Ich habe schon einiges geschaft denke ich. Jetzt habe ich aber das Problem das ich irgendwie es nicht schaffe für die jeden Buchstaben eine Zahl zuzuweisen.Wenn ich die Formel benutze und das ausgeben will nimmt der Compiler immer den Ascii.
Aber wegen der Formel, die ich übrigens benutzen soll, funkt das nicht.
Hier mal mein Code vielleicht hat einer ne idee.#include <stdio.h>
#include <string.h>
#include <ctype.h>int menue(void);
int codieren(void);
int decodieren(void);int main(void)
{
menue();return 0;
}
int menue(void)
{
int auswahl1;printf("[1] Codieren\n");
printf("[2] Decodieren\n\n");printf("Auswahl: ");
scanf("%i", &auswahl1);if(auswahl1 == 1)
codieren();else if(auswahl1 == 2)
decodieren();else
{
fflush(stdin);
printf("Falsche Eingabe! Neuer Versuch\n\n");
menue();
}return 0;
}
int codieren(void)
{
FILE *datei;char eingabe[500];
int laenge;
int zahl, zaehler;
int a;
char alphabet_kle[26];
char alphabet_gro[26];for(a=0;a<26;a++)
{
alphabet_kle[a] = 97 + a;
}for(a=0;a<26;a++)
{
alphabet_gro[a] = 65 + a;
}datei = fopen("codiert.txt","w");
printf("Um welche Zahl soll verschoben werden? ");
scanf("%i", &zahl);fflush(stdin);
printf("Text: ");
fgets(eingabe, 500, stdin);
fflush(stdin);laenge = strlen(eingabe);
for(zaehler=0;zaehler<laenge;zaehler++)
{if(isalpha(eingabe[zaehler]))
{eingabe[zaehler] = eingabe[zaehler] + zahl;
}
}
printf("Codierter Code: %s\n\n", eingabe);fprintf(datei, eingabe);
return 0;
}int decodieren(void)
{
printf("decodieren");
return 0;
}danke
-
Nulltens: sfds
Erstens: Ein char IST ein Zahlenwert - der wird nur bei Bedarf als ASCII-Zeichen dargestellt - hängt von der Art ab, wie du es ausgibst (die Formatkennungen beim printf()).
Zweitens: Für das Caesar-Chiffre müsstest du darauf achten, daß die Ausgaben weiterhin als Buchstaben durchgehen können:
x //Ausgangspunkt toupper(x) //Umwandeln in Großbuchstaben //natürlich kannst du auch Groß- und Kleinbuchstaben getrennt behandeln -'A' //verschieben auf 0..25 +zahl //Verschlüsselung %26 //Bereichsbeschränkung +'A' //rückverschieben auf 'A'..'Z'
-->
eingabe[zaehler]=(toupper(eingabe[zaehler]-'A'+zahl)%26 + 'A'
Drittens: fflush(stdin) ist böse (aka "undefiniertes Verhalten").