In VS I am told this function “does not return a value in all control paths.” A bot told me specifically the issue is with this line: else if (letter + key <= 90). It said that if the outcome results in letter + key equally exactly 90 then a value is not returned, but I thought that was covered where ‘<=’ means ‘less than or equals.’

char rotate(char letter, int key)
{
    if (isalpha(letter) == true)
    {
        if (letter + key > 90)
        {
            int overage = letter + key - 90;
            letter = 64 + overage;

            while (letter > 90)
            {
                overage = letter - 90;
                letter += overage;
            }

            return letter;
        }

        else if (letter + key &lt;= 90)
        {
            letter += key;
            return letter;
        }
    }

    else if (isalpha(letter) == false)
    {
        return letter;
    }
  • milon@lemm.eeOP
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Ah I see. I had a bad habit of using else if statements instead of else statements because I thought else if could be better in seeing the condition it’s testing for so it was clearer. I get the logic is actually different now.

    • towerful@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      1 year ago

      I’m a fan of early returns.
      So

      if(isalpha(letter) == false) return letter
      if(letter whatever) {
         Do thing
         Return letter
      }
      if(letter something else) {
         Do something else
         Return letter
      }
      throw error("unprocessable letter")
      

      I find it lets me mentally walk through all the paths more easily.
      And if something gets too complex for this, then I need to break it down into further functions

    • ShaunaTheDead@kbin.social
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      It’s not at all necessary, but I find it makes much easier to read code if you instead only use if statements and just return early when you’re in a function. For example, you could check isalpha(letter) == true is true then check letter + key &lt;= 90 do the letter += key; return letter; then since letter + key must be > 90 if it didn’t already return a value, then you can do the while statement and return letter without needing an if statement at all. Then the isalpha(letter) == false is also unncessary, just return letter at the end.

      Like this:

      char rotate(char letter, int key)
      {
        if (isalpha(letter)
        {
          if (letter  + key &lt;= 90)
          {
              letter += key;
              return letter;
          }
      
          do the while loop here
        }
      
        return letter;
      }