C中的Vigenere密码

时间:2015-11-29 22:48:32

标签: c vigenere cs50

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

int main( int argc,  string argv[])
{

    if(argc!=2)
    {
        printf("One more string \n");
    }
    string key = argv[1];
    else if(!isalpha(key))
    {
        printf("Prompt only alphabet letters\n");
    }
    else 
    {
        string p = GetString();

        for ( i=0, j=0, n=strlen(p); i<p; i++, j++)
        { 
            if(j>=stlrlen(p))
            {
                j=0;
            }

            if(isupper(p[i]))
            {
                printf("%c", ((p[i] +key[j])%26)+'A');
            }

            if(islower(p[i]))
            {
                printf("%c", ((p[i] + key[j])%26)+'a');
            }

            if(!isupper(p[i]) && !islower(p[i]))
            {
                printf("%c", p[i]);
            }
            printf("\n");
            return 0;
        }
    }
}

我的代码出了什么问题? CS50设备带给我一个错误

c:15:1 expected expression.

我的代码中有什么意义吗? 有人能帮我吗? 如果我只是删除了else代码块,它会给else带来同样的错误。

2 个答案:

答案 0 :(得分:2)

我认为问题在于您无法分享ifelse ififelse

的陈述
if(argc!=2)
{
    printf("One more string \n");
}
string key = argv[1]; // This is the problem ➞ it cannot sit in the middle of if and else or else if
else if(!isalpha(key))
{
    printf("Prompt only alphabet letters\n");
}

此外,您可能需要制作else ifelse常规if语句,因为它看起来像是在进行一些验证

此外,由于您在for循环中有i<pp是一个字符串。此外,由于您不在循环中更新n,因此您应该在

之外进行初始化
int n = strlen( p );
for (int i=0, j=0; i<n; i++, j++) 

尽管声明了n并将其赋值为strlen( p ),但您还是在for-loop中使用了函数调用。这没有什么不对,使用你指定的变量可能更有意义。

答案 1 :(得分:1)

if和else if语句之间不能有代码。

string key = argv[1];不能存在