“条件为假”表示“错误:将变量统一使用的含义是什么?

问题描述 投票:-3回答:1

我正在研究问题集,在创建函数并返回其值时遇到了问题。代码如下:

int shift(char c){
    int key;
    if (isupper(c)){
        key = c - 65;
    }else if (islower(c)){
        key = c - 97;
    }
return key;
}

该函数以字符作为输入并返回一个整数。该整数值将是字母字符减去特定的ascii值,它将按从0到25的顺序设置每个字母数字。当我不初始化key变量时,就会出现问题。当我将其初始化为0时,该函数将按预期工作。

我想知道为什么会这样?我看不到在完成计算后,将键统一化会如何影响其值。

出现的实际错误是:

vigenere.c:48:15: error: variable 'key' is used uninitialized whenever 'if' condition
      is false [-Werror,-Wsometimes-uninitialized]
    }else if (islower(c)){
c cs50
1个回答
0
投票

您会收到此警告,因为有些代码路径未设置key,但随后使用。

isupperislower功能不是相反的,例如一个错误的返回值并不意味着另一个错误。例如,c包含字符'0'isupperislower都将返回false。发生这种情况时,将永远不会设置key的值,因此其值为indeterminate。这意味着无法可靠地预测其值,并且实际上尝试读取它可以调用undefined behavior

您需要处理两个函数都返回false的情况:

int shift(char c){
    int key;
    if (isupper(c)){
        key = c - 65;
    }else if (islower(c)){
        key = c - 97;
    } else {
        key = c;
    }
    return key;
}

或永远:

int shift(char c){
    if (isupper(c)){
        return c - 65;
    }else if (islower(c)){
        return c - 97;
    } else {
        return c;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.