Reputation: 49
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
Reputation: 870
Your function containDigit has two problems:
Upvotes: 0
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
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