Reputation: 257
This function asks for an integer between loLimit and hiLimit and allows the user to safely enter it. It keeps asking until the user enters a number in the legal range. Then it returns the legal number.
The correct output should be:
Please enter an integer between 32 and 127: 19
Please enter an integer between 32 and 127: 128
Please enter an integer between 32 and 127: 48
Please enter an integer between 48 and 127: 47
Please enter an integer between 48 and 127: 65
However, my output behaves strangely, it seems as if the loLimit value changes back and forth. Also, numbers are only recorded after entered twice.
Please enter an integer between 32 and 127: 2
Please enter an integer between 32 and 127: 150
Please enter an integer between 32 and 127: 56
Please enter an integer between 32 and 127: 56
Please enter an integer between 56 and 127: 66
Please enter an integer between 32 and 127: 66
Please enter an integer between 66 and 127: 77
Here's my code:
int enterNumber (int loLimit, int hiLimit){
int min;
int max;
do {
printf("Please enter an integer between %d and %d:\n", loLimit, hiLimit);
scanf("%d", &min);
}
while (min<loLimit || min>hiLimit);
return min;
}
int main(){
enterNumber(32,127);
int min=enterNumber(32,127);
enterNumber(min,127);
int max=enterNumber(enterNumber(32,127),127);
}
Upvotes: 1
Views: 164
Reputation: 2757
You call the enterNumber() function 5 times so 5 accepted values are taken :
enterNumber(32,127);
Please enter an integer between 32 and 127: 56
1st accepted number
int min=enterNumber(32,127);
Please enter an integer between 32 and 127: 56 // 2nd one
2nd accepted number
enterNumber(min,127);
Please enter an integer between 56 and 127: 66
3rd accepted answer.
int max=enterNumber(enterNumber(32,127),127); //called twice
Please enter an integer between 32 and 127: 66
Please enter an integer between 66 and 127: 77
4th and 5 th accepted answer
You can correct your logic by deleting the first and third enternumber call as shown .
int enterNumber (int loLimit, int hiLimit){
int min;
int max;
do {
printf("Please enter an integer between %d and %d:\n", loLimit, hiLimit);
scanf("%d", &min);
}
while (min<loLimit || min>hiLimit);
return min;
}
int main(){
// enterNumber(32,127); comment out this
int min=enterNumber(32,127);
// enterNumber(min,127);
int max=enterNumber(min,127);
int no=enterNumber(min,max);
}
First it accepts a minimum value , then a maximum and finally enters a no between this range.
Upvotes: 3