2016-04-17 33 views
0

Ich habe zwei Dinge für pset2 ein Caesar Cipher Encryptor und Decryptor erstellt. Mein Verschlüssler funktioniert und er heißt caesar.c, aber mein Decryptor (decryptor.c) funktioniert nicht und ich kann nicht herausfinden warum? Hier ist mein Code.Mein Decryptor funktioniert nicht

Caesar.c

#include <cs50.h> 
#include <string.h> 
#include <stdio.h> 
#include <math.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 
#include "encryptorFunction.c" 


int main(int argc, string argv[]) { 
    //checks for enough args 
    if (argc >= 2) { 
     //converts the second arg to an integer 
     int k = atoi(argv[1]); 
     string stringToBeEncrypted = GetString(); 
     printf("%s\n", encryptor(stringToBeEncrypted, k)); 
    } else { 
     printf("Please add a key argument\n"); 
     return 1; 
    } 
} 

Decryptor.c

#include <cs50.h> 
    #include <string.h> 
    #include <stdio.h> 
    #include <math.h> 
    #include <stdlib.h> 
    #include <ctype.h> 
    #include "encryptorFunction.c" 

    // almost same as caesar 


    int main(void) { 
     const string stringToBeEncrypted = GetString(); 
      // string stringToBeEncrypted = GetString(); 
      //checks all possible decryptions 
      for(int k=1;k<26;k++) { 
       printf("%s\n", encryptor(stringToBeEncrypted, k)); 
      } 
    } 

encryptorFunction.c

#include <cs50.h> 
#include <string.h> 
#include <stdio.h> 
#include <math.h> 
#include <stdlib.h> 
#include <ctype.h> 

string encryptor(string encryptString, int key) { 
    //loops through every character 
    string encryptStringCopy = encryptString; 
    for (int i = 0, n = strlen(encryptStringCopy); i < n; i++) { 
     //converts the specific char to its ascii value 
     int ascii = (int) encryptStringCopy[i]; 
     //makes key 31 is the same as key 5 
     key = key % 26; 
     //checks if it is an alphabetical letter 
     if (isalpha(encryptStringCopy[i])) { 
      //checks if lowercase 
      if (islower(encryptStringCopy[i])) { 
       //handles the corner case of being z since 26 % 26 is not 26 it's 0 
       if ((ascii-96+key) == 26) { 
        ascii = 122; 
       }else { 
        //takes the lowercase alphabetical numbers to the 1-26 alphabet then checks mod 26 to cycle back and adds it back. 
        ascii = ((ascii-96+key) % 26) + 96; 
       } 
       //else part is for uppercase case 
      }else { 
       //same logic as above 
       if ((ascii-64+key) == 26) { 
        ascii = 90; 

       }else { 
        ascii = ((ascii-64+key) % 26) + 64; 
       } 
      } 
     } 
     //converts the ascii back to a char 
     char newChar = (char) ascii; 
     //sets the new char into the string 
     encryptStringCopy[i] = newChar; 
    } 
    return encryptStringCopy; 
} 
+0

Haben Sie wirklich die Code-Datei beabsichtigen 'Decryptor.c' die Funktion' Verschlüssler() 'zu nennen, die gleiche Funktion, die in 'Caesar.c' aufgerufen wird? –

+0

Ja, so entschlüsselt es. –

+0

Können Sie sehen, was damit nicht stimmt? –

Antwort

2

Ihre encryptor() Funktion ändert die Eingabezeichenfolge (das Argument encryptString) an seinem Platz. Daher führt das wiederholte Aufrufen derselben Eingabe zu unerwarteten Ergebnissen.

Diese Funktion sollte eine neue Zeichenfolge zurück zu schaffen, anstatt die eine Modifizierung es in geben wurde.

+0

Das ist mir aufgefallen und ich habe es tatsächlich repariert, aber es hat nicht funktioniert. –

+0

Können Sie ein Beispiel geben? Ich habe versucht, eins zu machen, aber es hat nicht funktioniert. –

+0

Also, was hast du versucht, und was ist passiert? "War nicht funktioniert" ist ungefähr so ​​vage wie du nur sein kannst. – duskwuff