Как заставить функции работать правильно, когда они реализованы в операторе switch case - PullRequest
0 голосов
/ 18 апреля 2019

ОБНОВЛЕНИЕ: Кажется, проблема связана с scanf ("% [^ \ n] s", сообщение); строка, потому что при удалении [^ \ n] функция работает, но не учитывает пробелы. Одна функция работает, когда вызывается в основном, но не печатается правильно с меню.

У меня есть две отдельные функции, которые зарекомендовали себя корректно при простом вызове в main, однако мне нужно объединить все эти функции в один код и вызывать их через пользовательское меню переключения. Когда я это реализую, отдельные коды не работают так же, как при печати. Код предназначен для шифров вращения, и одна функция была включена в меню регистра переключателей для пользователя. Когда функция encryptRK () вызывается одна (то есть без меню регистра переключателей), она правильно печатает первую строку, а затем принимает пользовательский ввод и выдает правильный вывод. При вводе этого единственного кода с главным меню пользователя оно больше не работает и печатает «Введите сообщение для шифрования: введите ключ вращения:» все в одну строку и не примет ввод для шифрования, даже если введено \ n в утверждении printf. Почему этот код не будет работать с меню, если он работает, когда вызывается один?

#include <stdio.h>

char encryptRK(char character, int key); 
char decryptRK(char charcter, int key); 

int main() {
char character;
int key;

printf("Please select an option: \n");\
printf("a) Encrypt a message using rotation cipher with key given\n");
printf("b) Decrypt a message using rotation cipher with key given\n");
printf("c) Encrypt a message using substitution cipher with key given\n");
printf("d) Decrypt a message using substitution cipher with key given\n");
printf("e) Decrypt a message using rotation cipher given text only\n");
printf("f) Decrypt a message using substitution cipher given text only\n");

char c;
scanf("%c", &c);

while(c > 'a' || c < 'f'){
    switch(c){
        case 'a': encryptRK(character, key);
            break;
        case 'b': decryptRK(character, key);
            break;
        /*case 'c': encryptSK(character, key);
            break;
        case 'd': decryptSK(character, key);
            break;
        case 'e': decryptR(character);
            break;
        case 'f': decryptS(character);
            break;*/
        default: printf("Unknown option %c\nPlease enter a, b, c, d, e or f\n");
    }
}
return 0;

}

// Case 'a': Function for encryptRK() 

char encryptRK(char character, int key){

char message[100];
int i;

printf("Enter a message to encrypt: ");
scanf("%[^\n]s", message);

printf("Enter rotation key: ");
scanf("%d", &key); 

for(i = 0; message[i] != '\0'; ++i){
    character = message[i];

    if(character >= 'a' && character <= 'z'){
        character = character - 32;
        character = character + key;

        if(character > 'Z'){
            character = character - 26;
        }
    }

    else if(character >= 'A' && character <= 'Z'){
        character = (character + key);

        if(character > 'Z'){
              character = character - 26;
           }
    }

    message[i] = character;
}

printf("Encrypted message: %s", message);
//return message;
}

1 Ответ

0 голосов
/ 18 апреля 2019

Вы должны проверить своего персонажа, который больше чем a и меньше чем f во время цикла.Попробуйте использовать a> = & <= f. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...