c - 在 switch case 语句中实现时如何使函数正确运行

标签 c

更新:该问题似乎与 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/

相关文章:

c - 主线程退出时,其他线程是否也退出?

c - 如何编译Discount C库?

c - 在 C 中使用 libcurl 按线程读取一个文件

c++ - 未定义的函数引用

c - 整数如何提升为无符号整数

c - 何时进行 malloc 何时不进行 -- C 编程

克隆系统调用和互斥

c - 在 Windows 和 Linux 下如何链接到 OS C 库?

c - -fno-stack-protector 不工作

c - 您对此算法有何看法?