Katherine
Katherine

Reputation: 257

Incorrect output from while loop

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

Answers (1)

Sourav Kanta
Sourav Kanta

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

Related Questions