ОБНОВЛЕНИЕ: Кажется, проблема связана с 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;
}