-1

所以我正在编写一个密码程序作为哈佛 CS50 课程的一部分,我有这个代码来检查一个字符 + 密码密钥是否会将其置于 ASCII 字母范围之外,并在它出现时将其循环回来(以及保留案子)。循环遍历的数组类型是“char”(纯文本)和“int”(cipherArray)

if (((plainText[i] < 91) && ((plainText[i] + cipherArray[j]) > 90)) || ((plainText[i] > 97) && ((plainText[i] + cipherArray[j]) > 122))) 
            {
                printf("%c", ((plainText[i] + cipherArray[j]) - 26));
            }
            else
            {
                printf("%c", (plainText[i] + cipherArray[j]));
            }

但是上面的代码有点笨拙,我试图通过用我这样编写的函数替换它来整理它:

char codeLetters(char a, int b)
{
    if (((a < 91) && (a + b) > 90) || ((a > 97) && (a + b) > 122))
    {
        char c = (a + b) - 26;
    }
    else
    {
        char c = a + b;
    }

    return c;
}

我的想法是我可以使用以下方法调用该函数:

char code = codeLetters(plainText[i], cipherArray[j]);
            printf("%c", code);

但是,当我尝试编译它时,会出现以下错误:

vgen1.c:114:14: 错误:未使用的变量 'c' [-Werror,-Wunused-variable] char c = (a + b) - 26; ^ vgen1.c:118:14: 错误:未使用的变量 'c' [-Werror,-Wunused-variable] char c = a + b; ^ vgen1.c:121:12: 错误:使用未声明的标识符“c”返回 c;

有人可以让我知道我哪里出错了吗?作为记录,我在这段代码中有另一个运行得很好的函数

4

2 回答 2

3

有人可以让我知道我哪里出错了吗?

问题是您在语句中声明了变量,c 因此if变量的范围就在if. 因此,声明:

return c;

无法正确执行,因为c函数范围内没有定义。将您的功能更改codeLetters为:

char codeLetters(char a, int b)
{
    char c;
    if (((a < 91) && (a + b) > 90) || ((a > 97) && (a + b) > 122))
    {
        c = (a + b) - 26;
    }
    else
    {
        c = a + b;
    }

    return c;
}

有关变量范围的信息,请参阅此问题

于 2017-05-22T09:22:48.843 回答
0

c 的范围仅限于声明它的块内,它在返回的地方不可见

char codeLetters(char a, int b)
{
    if (((a < 91) && (a + b) > 90) || ((a > 97) && (a + b) > 122))
    {
        char c = (a + b) - 26;
    }
    else
    {
        char c = a + b;
    }

    return c; // c is not visible here
}
于 2017-05-22T09:26:56.663 回答