C 不接受用户输入的其他选项

C 不接受用户输入的其他选项,c,caesar-cipher,C,Caesar Cipher,我必须在C中使用凯撒密码。加密和解密取决于密钥和密码(最多4个字符)加上移动方向,所有三个都由用户给出。 在我的代码中,它只取左边,当我输入右边时,它会再次询问方向。我不知道怎么了 这是我的密码: #include <stdio.h> #include <string.h> char pass[4]; char shiftdirection[6]; char left[6] = "left"; char right[6] = "right"; char ch; int

我必须在C中使用凯撒密码。加密和解密取决于密钥和密码(最多4个字符)加上移动方向,所有三个都由用户给出。 在我的代码中,它只取左边,当我输入右边时,它会再次询问方向。我不知道怎么了

这是我的密码:

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

char pass[4];
char shiftdirection[6];
char left[6] = "left";
char right[6] = "right";
char ch;
int i, key;

void readline (){ //cette fonction prend de l'utilisateur le password et la clé
    do{
    printf("Please enter the pass, max 4 characters: \n");
    gets(pass);
    }while((strlen(pass)>4) || (strlen(pass)<4)); //get the password from th
    printf("Please enter the key: \n");
    scanf("%d",&key);
}

//cette fonction utilisée pour chiffrer
void encrypt(){
    printf("Enter the direction: \n");
    scanf("%s", &shiftdirection);
    while ((strcmp(shiftdirection,left)==1) || (strcmp(shiftdirection,right)==1)) { // demander de l'utilisateur la direction de décalage

        printf("Enter the direction: \n");
        scanf("%s", &shiftdirection);
    }
    if(strcmp(shiftdirection,left)==0){ // si l'utilisateur a écrit left, le programme commence le chiffrage avec un décalage à gauche
    for( i = 0; pass[i] != '\0'; i++){
        ch = pass[i];
        if(ch >= 'a' && ch <= 'z'){
            ch = (char) (ch + key);
            if(ch > 'z'){
                ch = (char) (ch - 'z' + 'a' - 1);
            }
            pass[i] = ch;
        }
        else if(ch >= 'A' && ch <= 'Z'){
            ch = (char) (ch + key);
            if(ch > 'Z'){
                ch = (char) (ch - 'Z' + 'A' - 1);
                }
            pass[i] = ch;
            }
        }
    }
   else if(strcmp(shiftdirection,right)==0){ // si l'utilisateur a écrit left, le programme commence le chiffrage avec un décalage à gauche
        for( i = strlen(pass) - 1; i >= 0; --i){
            ch = pass[i];
            if(ch >= 'a' && ch <= 'z'){
                ch = (char) (ch + key);
                if(ch > 'z'){
                    ch = (char) (ch - 'z' + 'a' - 1);
                }
                pass[i] = ch;
            }
            else if(ch >= 'A' && ch <= 'Z'){
                ch = (char) (ch + key);
                if(ch > 'Z'){
                    ch = (char) (ch - 'Z' + 'A' - 1);
                }
                pass[i] = ch;
            }
        }
    }
    printf("Encrypted Password is %s", pass); // le password chiffré
}

//cette fonction utilisée pour déchiffrer
void decrypt(){
    for(i = 0 ; pass[i] != '\0' ; ++i){
        ch = pass[i];
        if(ch >= 'a' && ch <= 'z'){
            ch = (char) (ch - key);
            if(ch < 'a') {
                ch = (char) (ch + 'z' - 'a' + 1);
            }
            pass[i] = ch;
        } else if (ch >= 'A' && ch <= 'Z'){
            ch = (char) (ch - key);
            if(ch < 'A'){
                ch = (char) (ch + 'Z' - 'A' + 1);
            }
            pass[i] = ch;
        }
    }
    printf("\nDecrypted Password is %s", pass); //le password déchiffré
}
//main
int main() {
    readline();
    encrypt();
    decrypt();
    return 0;
}
#包括
#包括
charpass[4];
字符移位方向[6];
左字符[6]=“左”;
char right[6]=“right”;
char ch;
int i,键;
void readline(){//cette fonction prend de l'usilizateur le password et la clé
做{
printf(“请输入密码,最多4个字符:\n”);
获得(通过);
}while((strlen(pass)>4)| |(strlen(pass)='a'和&ch'z'){
ch=(char)(ch-'z'+'a'-1);
}
pass[i]=ch;
}
否则如果(ch>='A'&&ch'Z'){
ch=(char)(ch-'Z'+'A'-1);
}
pass[i]=ch;
}
}
}
否则,如果(strcmp(shiftdirection,right)==0){//si l'usilizateur aécrit left,则程序将开始计算
对于(i=strlen(pass)-1;i>=0;--i){
ch=通过[i];
如果(ch>='a'&&ch'z'){
ch=(char)(ch-'z'+'a'-1);
}
pass[i]=ch;
}
否则如果(ch>='A'&&ch'Z'){
ch=(char)(ch-'Z'+'A'-1);
}
pass[i]=ch;
}
}
}
printf(“加密密码为%s”,通过);//le Password chiffré
}
//切特奇弗勒咖啡馆
void decrypt(){
对于(i=0;通过[i]!='\0';++i){
ch=通过[i];
如果(ch>='a'&&ch='a'&&ch
<> LI>注释中提到的人必须更改<代码> Char PASS(4)-Char PASS(5)< /C> >从按压返回中考虑<代码> \ 0 <代码>或<代码> \n>代码> .<
  • 不要使用
    gets
    。使用
    fgets
    代替,因为
    gets
    不安全,不再是C的一部分
  • 使用
    getchar()
    通过返回键捕获剩余的
    \0
  • scanf
    更改为
    scanf\u s
    ,以提高安全性
  • 您的
    while((strcmp(shiftdirection,left)==1)| |(strcmp(shiftdirection,right)==1))
    检查其中一个条件是否为真,然后输入。您需要检查两个条件是否都为真,因此需要
    和&
    而不是
    |
  • 我对你的代码做了一点修改,得出了以下结论

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char pass[5];
    char shiftdirection[6];
    char left[6] = "left";
    char right[6] = "right";
    char ch;
    int i, key;
    
    void readline (){ //cette fonction prend de l'utilisateur le password et la clé
        do{
        printf("Please enter the pass, max 4 characters: \n");
        fgets(pass, sizeof pass, stdin);
        }while((strlen(pass)>4) || (strlen(pass)<4)); //get the password from th
        printf("Please enter the key: \n");
        scanf_s("%d",&key);
        getchar();
    }
    
    //cette fonction utilisée pour chiffrer
    void encrypt(){
        printf("Enter the direction: \n");
        fgets(shiftdirection, sizeof shiftdirection, stdin);
        shiftdirection[strcspn(shiftdirection, "\n\r")] = 0;
        while ((strcmp(shiftdirection,left)==1) && (strcmp(shiftdirection,right)==1)) { // demander de l'utilisateur la direction de décalage
    
            printf("Enter the direction: \n");
            fgets(shiftdirection, sizeof shiftdirection, stdin);
            shiftdirection[strcspn(shiftdirection, "\n\r")] = 0;
        }
        if(strcmp(shiftdirection,left)==0){ // si l'utilisateur a écrit left, le programme commence le chiffrage avec un décalage à gauche
        for( i = 0; pass[i] != '\0'; i++){
            ch = pass[i];
            if(ch >= 'a' && ch <= 'z'){
                ch = (char) (ch + key);
                if(ch > 'z'){
                    ch = (char) (ch - 'z' + 'a' - 1);
                }
                pass[i] = ch;
            }
            else if(ch >= 'A' && ch <= 'Z'){
                ch = (char) (ch + key);
                if(ch > 'Z'){
                    ch = (char) (ch - 'Z' + 'A' - 1);
                    }
                pass[i] = ch;
                }
            }
        }
       else if(strcmp(shiftdirection,right)==0){ // si l'utilisateur a écrit left, le programme commence le chiffrage avec un décalage à gauche
            for( i = strlen(pass) - 1; i >= 0; --i){
                ch =pass[i];
                if(ch >= 'a' && ch <= 'z'){
                    ch = (char) (ch + key);
                    if(ch > 'z'){
                        ch = (char) (ch - 'z' + 'a' - 1);
                    }
                    pass[i] = ch;
                }
                else if(ch >= 'A' && ch <= 'Z'){
                    ch = (char) (ch + key);
                    if(ch > 'Z'){
                        ch = (char) (ch - 'Z' + 'A' - 1);
                    }
                    pass[i] = ch;
                }
            }
        }
        printf("Encrypted Password is %s", pass); // le password chiffré
    }
    
    //cette fonction utilisée pour déchiffrer
    void decrypt(){
        for(i = 0 ; pass[i] != '\0' ; ++i){
            ch = pass[i];
            if(ch >= 'a' && ch <= 'z'){
                ch = (char) (ch - key);
                if(ch < 'a') {
                    ch = (char) (ch + 'z' - 'a' + 1);
                }
                pass[i] = ch;
            } else if (ch >= 'A' && ch <= 'Z'){
                ch = (char) (ch - key);
                if(ch < 'A'){
                    ch = (char) (ch + 'Z' - 'A' + 1);
                }
                pass[i] = ch;
            }
        }
        printf("\nDecrypted Password is %s", pass); //le password déchiffré
    }
    //main
    int main() {
        readline();
        encrypt();
        decrypt();
        system("pause");
        return 0;
    }
    
    #包括
    #包括
    #包括
    charpass[5];
    字符移位方向[6];
    左字符[6]=“左”;
    char right[6]=“right”;
    char ch;
    int i,键;
    void readline(){//cette fonction prend de l'usilizateur le password et la clé
    做{
    printf(“请输入密码,最多4个字符:\n”);
    fgets(通道、通道尺寸、标准尺寸);
    }while((strlen(pass)>4)| |(strlen(pass)='a'和&ch'z'){
    ch=(char)(ch-'z'+'a'-1);
    }
    pass[i]=ch;
    }
    否则如果(ch>='A'&&ch'Z'){
    ch=(char)(ch-'Z'+'A'-1);
    }
    pass[i]=ch;
    }
    }
    }
    否则,如果(strcmp(shiftdirection,right)==0){//si l'usilizateur aécrit left,则程序将开始计算
    对于(i=strlen(pass)-1;i>=0;--i){
    ch=通过[i];
    如果(ch>='a'&&ch'z'){
    ch=(char)(ch-'z'+'a'-1);
    }
    pass[i]=ch;
    }
    否则如果(ch>='A'&&ch'Z'){
    ch=(char)(ch-'Z'+'A'-1);
    }
    pass[i]=ch;
    }
    }
    }
    printf(“加密密码为%s”,通过);//le Password chiffré
    }
    //切特奇弗勒咖啡馆
    void decrypt(){
    对于(i=0;通过[i]!='\0';++i){
    ch=通过[i];
    如果(通道>='a'&通道='a'&通道4)| |(斯特伦(通道)
    <> LI>注释中提到的人必须更改<代码> Char PASS(4)-Char PASS(5)< /C> >从按压返回中考虑<代码> \ 0 <代码>或<代码> \n>代码> .<
    
  • 不要使用
    gets
    。使用
    fgets
    代替,因为
    gets
    不安全,不再是C的一部分
  • 使用
    getchar()
    通过返回键捕获剩余的
    \0
  • scanf
    更改为
    scanf\u s
    ,以提高安全性
  • 您的
    while((strcmp(shiftdirection,left)==1)| |(strcmp(shiftdirection,right)==1))
    检查其中一个条件是否为真,然后输入。您需要检查两个条件是否都为真,因此需要
    和&
    而不是
    |
  • 我对你的代码做了一点修改,得出了以下结论

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char pass[5];
    char shiftdirection[6];
    char left[6] = "left";
    char right[6] = "right";
    char ch;
    int i, key;
    
    void readline (){ //cette fonction prend de l'utilisateur le password et la clé
        do{
        printf("Please enter the pass, max 4 characters: \n");
        fgets(pass, sizeof pass, stdin);
        }while((strlen(pass)>4) || (strlen(pass)<4)); //get the password from th
        printf("Please enter the key: \n");
        scanf_s("%d",&key);
        getchar();
    }
    
    //cette fonction utilisée pour chiffrer
    void encrypt(){
        printf("Enter the direction: \n");
        fgets(shiftdirection, sizeof shiftdirection, stdin);
        shiftdirection[strcspn(shiftdirection, "\n\r")] = 0;
        while ((strcmp(shiftdirection,left)==1) && (strcmp(shiftdirection,right)==1)) { // demander de l'utilisateur la direction de décalage
    
            printf("Enter the direction: \n");
            fgets(shiftdirection, sizeof shiftdirection, stdin);
            shiftdirection[strcspn(shiftdirection, "\n\r")] = 0;
        }
        if(strcmp(shiftdirection,left)==0){ // si l'utilisateur a écrit left, le programme commence le chiffrage avec un décalage à gauche
        for( i = 0; pass[i] != '\0'; i++){
            ch = pass[i];
            if(ch >= 'a' && ch <= 'z'){
                ch = (char) (ch + key);
                if(ch > 'z'){
                    ch = (char) (ch - 'z' + 'a' - 1);
                }
                pass[i] = ch;
            }
            else if(ch >= 'A' && ch <= 'Z'){
                ch = (char) (ch + key);
                if(ch > 'Z'){
                    ch = (char) (ch - 'Z' + 'A' - 1);
                    }
                pass[i] = ch;
                }
            }
        }
       else if(strcmp(shiftdirection,right)==0){ // si l'utilisateur a écrit left, le programme commence le chiffrage avec un décalage à gauche
            for( i = strlen(pass) - 1; i >= 0; --i){
                ch =pass[i];
                if(ch >= 'a' && ch <= 'z'){
                    ch = (char) (ch + key);
                    if(ch > 'z'){
                        ch = (char) (ch - 'z' + 'a' - 1);
                    }
                    pass[i] = ch;
                }
                else if(ch >= 'A' && ch <= 'Z'){
                    ch = (char) (ch + key);
                    if(ch > 'Z'){
                        ch = (char) (ch - 'Z' + 'A' - 1);
                    }
                    pass[i] = ch;
                }
            }
        }
        printf("Encrypted Password is %s", pass); // le password chiffré
    }
    
    //cette fonction utilisée pour déchiffrer
    void decrypt(){
        for(i = 0 ; pass[i] != '\0' ; ++i){
            ch = pass[i];
            if(ch >= 'a' && ch <= 'z'){
                ch = (char) (ch - key);
                if(ch < 'a') {
                    ch = (char) (ch + 'z' - 'a' + 1);
                }
                pass[i] = ch;
            } else if (ch >= 'A' && ch <= 'Z'){
                ch = (char) (ch - key);
                if(ch < 'A'){
                    ch = (char) (ch + 'Z' - 'A' + 1);
                }
                pass[i] = ch;
            }
        }
        printf("\nDecrypted Password is %s", pass); //le password déchiffré
    }
    //main
    int main() {
        readline();
        encrypt();
        decrypt();
        system("pause");
        return 0;
    }
    
    #包括
    #包括
    #包括
    charpass[5];
    字符移位方向[6];
    左字符[6]=“左”;
    char right[6]=“right”;
    char ch;
    int i,键;
    void readline(){//cette fonction prend de l'usilizateur le password et la clé
    做{
    printf(“请输入密码,最多4个字符:\n”);
    fgets(通道、通道尺寸、标准尺寸);
    }while((strlen(pass)>4)| |(strlen(pass)='a'和&ch'z'){
    ch=(char)(ch-'z'+'a'-1);
    }
    pass[i]=ch;
    }
    否则如果(ch>='A'&&ch'Z'){
    ch=(char)(ch-'Z'+'A'-1);
    }
    pass[i]=ch;
    }
    }
    }
    否则,如果(strcmp(shiftdirection,right)==0){//si l'usilizateur aécrit left,则程序将开始计算
    对于(i=strlen(pass)-1;i>=0;--i){
    ch=通过[i];
    如果(ch>='a'&&ch'z'){
    ch=(char)(ch-'z'+'a'-1);
    }
    pass[i]=ch;
    }
    如果(ch>='