user1742419
user1742419

Reputation: 49

Broken Oven Keypad

The keypad is broken so the input numbers 1, 4, and 7 aren't working. In turn the computer outputs the next lowest and next highest number where 1, 4, and 7 are none of the digits.

My goal is to check out the digits and output true using a boolean function and then output the next highest number and next lowest number. I'm pretty sure I did most of what I need to do, but it isn't working out. I have inputted the number 444, and the results that came out were 443, and 445. Thank you for your help.

 #include <iostream>
 #include <conio.h>
 #include <cmath>

using namespace std;

bool containDigit(int number, int digit);

int main()
{
    int number, digit, lowNum, highNum;

cout<<"Enter a number between 1 and 999 for the oven temperature: ";
cin>>number;

//1st digit
digit = number / 100;
containDigit(number, digit);
if (containDigit(number, digit) == true)
{
    number = number - 100;
}

//2nd digit
digit = (number / 10) % 10;
containDigit(number, digit);
if (containDigit(number, digit) == true)
{
    number = number - 10;
}

//3rd Digit
digit = number % 10;
containDigit(number, digit);
if (containDigit(number, digit) == true)
{
    number = number - 1;
}

cout<<number<<endl;


getche();
return 0;

}

bool containDigit(int number, int digit)
{
    if ((digit == 1) || (digit == 4) || (digit == 7))
    {
        return true;
    }
    else
    {
        return 0;
    }
}

Upvotes: 0

Views: 1292

Answers (3)

pedrosorio
pedrosorio

Reputation: 870

Your function containDigit has two problems:

  1. It shouldn't need to receive the variable "number" as it doesn't use it
  2. You want to compare with == not =

Upvotes: 0

aib
aib

Reputation: 47001

Since this looks like homework, I will refrain from doing it for you and give you these hints:

It looks like you're not really clear on what "1st digit" is. Is it the first one from the left (hundreds) or the right (ones)? Look at your code and tell yourself how each portion of it would answer my question.

Is it ever possible for lowNum or highNum to have more than one digit different than number with your code as it is? How? Where are lowNum and highNum changed, and how?

Also, to expand on what @Al Kepp has said: When you have a function like that, try to test it with some very simple inputs rather than straight out assuming it works. This is called (or is similar to) "unit testing", which dictates that you divide your program into simple, independent units and test them separately. A simple call like containDigit(999, 4) returning true would've rang warning bells.

And speaking of warnings, always, always compile with as many of them as you can stand. (e.g. -Wall for gcc) Doing such might've warned you of the fact that you're not using the parameter number inside containDigit at all.

Upvotes: 0

Al Kepp
Al Kepp

Reputation: 5980

The bug is in containDigit function. Try this:

bool containDigit(int number, int digit) {
    if(digit == 1 || digit == 4 || digit == 7) return true;
    return false;
}

You must use == instead of =. Also you actually don't need number argument there.

Also there can be done several optimizations. Please look at it yourself (it's your homework) and think about repeated code.

Upvotes: 1

Related Questions