Ich arbeite derzeit an der Vigenere-Chiffre in CS50 mit der Sprache C. Die Voraussetzung ist, ein Programm zu machen, das einige Klartext basierend auf einem Schlüsselwort verschlüsselt (beide die Benutzereingaben). Es wird verschlüsselt basierend auf der Vigenere-Chiffre. Ich finde es schwer in Worten zu beschreiben, was die Vigenere-Chiffre ist, hier ist ein Beispiel aus der CS50-Spezifikation:CS50 PSet 2 - Vigenere - Sicherstellen, dass das Schlüsselwort alphabetisch ist
Wenn Vigenère selbst zu jemandem vertraulich sagen wollte, mit einem Schlüsselwort von, sagen wir, ABC, er würde das H mit einem Schlüssel von 0 (dh A) verschlüsseln, das E mit einem Schlüssel von 1 (dh B) und das erste L mit einem Schlüssel von 2 (dh C), an diesem Punkt wäre er aus Buchstaben in dem Schlüsselwort, und so würde er es wiederverwenden (ein Teil davon), um das zweite L wieder mit einem Schlüssel von 0 (dh A) zu verschlüsseln, und das O mit einem Schlüssel von 1 (dh B) wieder. Und so würde er HELLO als HFNLP schreiben.
Das Schlüsselwort muss eine Zeichenfolge aus allen alphabetischen Buchstaben sein und muss als zweites Befehlszeilenargument angegeben werden, d. H. Argv [1] in meinem Code unten. Das Problem, das ich habe, ist, dass ich das Programm nicht dazu bringen kann, den Schlüssel abzulehnen, wenn es nicht alphabetisch ist, und fortzufahren, wenn es nur alphabetisch ist. Ich habe versucht, es so zu tun (siehe Code unten) und es gibt die printf Fehlermeldung nicht zurück, wenn ich eine Zahl in argv [1] einfüge. Kann mir bitte jemand Ratschläge geben, was falsch ist? Entschuldigt, wenn das Format nicht groß ..
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
// declare command line argument variables
int main(int argc, string argv[])
{
string k = argv[1];
//return error if there aren't two command line arguments
if (argc != 2)
{
printf("Usage: ./vigenere k\n");
return 1;
}
//make sure key is all alphabetical
for (int i = 0; i < strlen(k); i++)
{
if(isalpha(k[i]))
{
return 0;
}
else
{
return 1;
printf("Please ensure all characters are alphabetical.\n");
}
}
}
Ich habe auch versucht, es so statt, was im Inneren der für Schleife oben und es hat nicht funktioniert:
if(!isalpha(k[i]))
{
return 1;
printf("Please ensure all characters are alphabetical.\n");
}
danke für die Hilfe :) Ich habe offensichtlich nicht verstanden, was die Rückkehr wirklich getan hat. – joshkeisler95
Ich habe die 'if'-Anweisung so geändert, dass sie nicht sofort bricht, wenn sie ein Alpha-Zeichen findet und sofort fehlschlägt, wenn ein Nicht-Alpha-Zeichen vorhanden ist. Wenn die Schleife abgeschlossen ist, hat 'argv [1]' den Alpha-Test bestanden. – usr
Sorry noch eine Sache - was ist size_t? – joshkeisler95