cs50的Vigenere cypher程序错误

cs50的Vigenere cypher程序错误,c,vigenere,cs50,C,Vigenere,Cs50,我正在用C语言为CS50编写一个Vigenene cypher程序,它几乎可以完美地工作。错误在于,有时当加密环绕输出时是一个?白色圆圈中的符号 下面是我的代码 #include <cs50.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int main(int argc, string argv[]) { char a

我正在用C语言为CS50编写一个Vigenene cypher程序,它几乎可以完美地工作。错误在于,有时当加密环绕输出时是一个?白色圆圈中的符号

下面是我的代码

#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(int argc, string argv[])
{
char a;
char letter;
char cryptletter;
char passletter;
string message;
int messcount = 0;

if(argc != 2)
{
    printf("Command line must contain one passphrase\n");
    return 1;
}

for(int i=0; i < strlen(argv[1]); i++)
{
    a = argv[1][i];

    if(isalpha(a) == 0)
    {
        printf("Encryption keyphrase must only contain alphabetic characters\n");
        return 1;
    }
}


message = GetString();


for (int j = 0; j < strlen(message); j++)
{
    letter = message[j];

    if(passletter < 91 && passletter > 64)
    {
        passletter = passletter + 32;
    }

    if(isupper(letter) != 0) //if uppercase 65-90
    {
        passletter = argv[1][messcount];
        cryptletter = passletter + letter - 97;

        if(cryptletter > 90)
        {
            cryptletter = cryptletter - 25;
        }

        printf("%c", cryptletter);
        messcount++;
    }

    if(islower(letter) != 0) //if lowercase 97-122
    {
        passletter = argv[1][messcount];
        cryptletter = passletter + letter - 97;

        if(cryptletter > 122)
        {
            cryptletter = cryptletter - 25;
        }

        printf("%c", cryptletter);
        messcount++;
    }


    if(messcount > strlen(argv[1])-1)
    {
        messcount = 0;
    }

    if (isalpha(letter) == 0)
    {
        printf("%c", letter);
    }
}

printf("\n");
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符串argv[])
{
字符a;
字符字母;
字符加密字母;
字符密码;
字符串消息;
int-messcont=0;
如果(argc!=2)
{
printf(“命令行必须包含一个密码短语\n”);
返回1;
}
对于(int i=0;i64)
{
passletter=passletter+32;
}
if(isupper(字母)!=0)//如果大写65-90
{
passletter=argv[1][messcont];
cryptletter=passletter+字母-97;
如果(加密字母>90)
{
密码字母=密码字母-25;
}
printf(“%c”,加密字母);
messcount++;
}
if(islower(letter)!=0)//if小写97-122
{
passletter=argv[1][messcont];
cryptletter=passletter+字母-97;
如果(加密字母>122)
{
密码字母=密码字母-25;
}
printf(“%c”,加密字母);
messcount++;
}
if(messcont>strlen(argv[1])-1)
{
messcount=0;
}
如果(isalpha(字母)==0)
{
printf(“%c”,字母);
}
}
printf(“\n”);
}
任何帮助都将不胜感激,因为凯撒·塞弗也有类似的问题。谢谢这里:

if(passletter < 91 && passletter > 64)
if(密码<91&&passletter>64)
未初始化密码