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;
}
}
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
lowNumorhighNumto have more than one digit different thannumberwith your code as it is? How? Where arelowNumandhighNumchanged, 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)returningtruewould’ve rang warning bells.And speaking of warnings, always, always compile with as many of them as you can stand. (e.g.
-Wallforgcc) Doing such might’ve warned you of the fact that you’re not using the parameternumberinsidecontainDigitat all.