更新:该问题似乎与 scanf("%[^\n]s", message); 有关行,因为当删除 [^\n] 时,该函数可以工作,但不考虑空格。当单独在 main 中调用时,该函数单独工作,但无法与菜单一起正确打印。
我有两个独立的函数,事实证明,只需在 main 中调用它们即可正常工作,但是我需要将所有这些函数合并到一个代码中,并通过用户的 switch case 菜单调用它们。当我实现此操作时,各个代码的工作方式不同,因为存在打印错误。该代码用于旋转密码,并且用户的开关盒菜单中包含一项功能。当单独调用 encryptRK() 函数时(即没有 switch case 菜单),它会正确打印第一行,然后获取用户输入并提供正确的输出。当将这个单一代码与主菜单中的用户菜单一起放入时,它不再起作用并打印“输入要加密的消息:输入旋转 key :”全部在一行上,并且不会接受要加密的输入,即使输入了\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;
}
最佳答案
您已在 while 循环中检查了大于 a 且小于 f 的字符。尝试使用 a>= & <=f 检查一下。
关于c - 在 switch case 语句中实现时如何使函数正确运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739775/