因此,我正在编写一个密码程序,作为哈佛 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/