c - 在我尝试用 C 编写的简单函数中出现 "unused variable"和 "undeclared identifier"错误,但我不明白为什么

标签 c function cs50 unused-variables

因此,我正在编写一个密码程序,作为哈佛 CS50 类(class)的一部分,我有这段代码来检查字符 + 密码 key 是否会将其超出 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] 字符 c = (a + b) - 26; ^ vgen1.c:118:14:错误:未使用的变量“c”[-Werror,-Wunused-variable] 字符 c = a + b; ^ vgen1.c:121:12:错误:使用未声明的标识符“c” 返回c;

有人可以告诉我哪里出了问题吗?根据记录,我在这段代码中有另一个函数运行得很好

最佳答案

Could someone let me know where I am going wrong?

问题是您在 if 语句中声明了变量 c 内部,因此该变量的范围就在 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;
}

参见this question有关变量范围的信息。

关于c - 在我尝试用 C 编写的简单函数中出现 "unused variable"和 "undeclared identifier"错误,但我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44109226/

相关文章:

linux - BASH:定义变量中的变量?

JavaScript - 创建一个函数通过传递对象来更新变量?

c - Vigenere Cipher - 如何忽略纯文本中的空格(在 C 中)?

c++ - sleep/nanosleep 是否通过使用繁忙的等待方案来工作?

c - 我的代码中的垃圾结果

php - 让 PHP 函数默认使用全局变量?

cs50 pset3排序函数

c - 马里奥问题集 - 为什么哈希值不打印?

c++ - 从 C/C++ 中的对数正态分布生成随机数

c - strncat() : Random character in target string