继续得到未声明的标识符我错误凯撒

时间:2017-03-30 09:45:47

标签: c++ c cs50

我正在从cs50课程开始学习pset2,但是我不明白为什么我一直得到这个错误,我没有声明我,因为我想我做了..首先我要求一个数字用作加密的密钥,比我要求的纯文本,应该用给定的数字加密,然后打印出来。

这是我的代码:

int main(int argc, string argv[])
{
    // get key from command line argument, return 1 if wrong
    if (argc < 2)
    {
        printf("No value entered!\n");
        return 1;
    }

    //store key in integer
    int k = atoi(argv[1]);

    if (k < 0)
    {
        printf("No right variable detected\n");
        return 1;
    }
    else
    {
        printf("Plain text: \n");
        string s = get_string();

        // iterate over strings in argv
        for (int i = 0; n = strlen(s); i < n; i++);
        {
            if (isalpha(s[i]))
            {
                // for capitalized letters
                if (isupper(s[i]))
                {
                    int a = s[i] - 65;
                    int b = (a + k) % 26;
                    int c = b + 65;
                    printf("%c", c);
                }

                //for lowercase
                else
                {
                    int d = s[i] - 97;
                    int e = (d + k) % 26;
                    int f = e + 97;
                    printf("%c", f);
                }
            }
            else
            {
                //for non alphabetical characters
                printf("%c", s[i]);
            }
        }
    }
    // print new line 
    printf("\n");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

For循环错误,它接受3个参数,你设置为4。

另外,请在for循环后注意分号。

这一行:

col

应该是:

for (int i = 0; n = strlen(s); i < n; i++);

注意逗号,最后没有分号

答案 1 :(得分:2)

for循环结束时有;

for (int i = 0; n = strlen(s); i < n; i++);
                                          ^

将其更改为

for (int i = 0, n = strlen(s); i < n; i++)

此外,正如您所见,init必须放在第一个分号,(逗号)分隔之前。

旁注

  1. 你应该避免使用&#34;魔术数字&#34;在代码中。在您的情况下,您可以简单地使用
  2. 您应该使用可以使您的代码更具可读性的变量名称
  3. 您可以使用单个变量进行灰化,而不是6

    if (isalpha(s[i]))
    {
        int ashed;
    
        // for capitalized letters
        if (isupper(s[i]))
        {
            ashed = s[i] - 'A';
            ashed = (ashed + k) % 26;
            ashed += 'A';
        }
    
        //for lowercase
        else
        {
            ashed = s[i] - 'a';
            ashed = (ashed + k) % 26;
            ashed += 'a';
        }
        printf("%c", ashed);
    }