简体   繁体   中英

Caesar cipher in C won't work

I've got an assignment from school to make a program that will encrypt and decrypt a text. I have to use this declaration:

int encrypted(char *plainText, int arrLength, int key, char *cipherText);

For the moment i can make the caesar cipher work when i have the for-loop (the one i show in myfunctions.c) in main.c, but when i write the for-loop in another file (myfunctions.c) with the declaration above, it compiles and runs, but it seems like the for-loop in myfunctions.c doesn't executes like it should.

Here is my main.c:

#include <stdio.h>
#include <string.h>
#include "myfunctions.h"

int main(){
    int key, arrLength, menu=0;
    char plainText[100], cipherText[100], result[100];


    printf("Encrypt\n");
    printf("Enter your key (1-25): ");
    scanf("%d", &key);
    printf("Write the word or sentece you want to encrypt: ");
    fgets(plainText, 100, stdin);
    arrLength=strlen(plainText);
    encrypted(plainText, arrLength, key, result);

getchar();
return 0;
}

myfunctions.c:

#include "myfunctions.h"
#include <stdio.h>
#include <string.h>

int encrypted(char *plainText, int arrLength, int key, char *cipherText){
int result = 0;

for(int i = 0; i < arrLength; i++)
{

    // encryption
    result = (*plainText + key);

    // wrapping after Z for uppercase letters
    if (isupper(*plainText) && (result > 'Z'))
    {
        result = (result - 26);
    }

    // wrapping after z for lowercase letters
    if (islower(*plainText) && (result > 'z'))
    {
        result = (result - 26);
    }


    if (isalpha(*plainText))
    {
        printf("%c", result);
    }


    else
    {
        printf("%c", *plainText);
    }

}
return 1;
}

myfunctions.h

#ifndef myfunctions_h
#define myfunctions_h

int encrypted(char *plainText, int arrLength, int key, char *cipherText);

#endif
  • You forgot to inclement plainText in the for loop in encrypted() .
  • Be careful not to have fgets() read newline character before the plain text.

Try this main function

int main(){
    int key, arrLength, menu=0;
    char keyText[100],plainText[100], cipherText[100], result[100];


    printf("Encrypt\n");
    printf("Enter your key (1-25): ");
    fgets(keyText, 100, stdin);
    sscanf(keyText, "%d", &key);
    printf("Write the word or sentece you want to encrypt: ");
    fgets(plainText, 100, stdin);
    arrLength=strlen(plainText);
    encrypted(plainText, arrLength, key, result);

    return 0;
}

and changing the loop for(int i = 0; i < arrLength; i++)
to for(int i = 0; i < arrLength; i++, plainText++)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM