Thread: Problem with while loop (not looping back despite test being true)

  1. #1
    Registered User
    Join Date
    Aug 2017
    Posts
    28

    Problem with while loop (not looping back despite test being true)

    Code:
    //Programming in C 
    
    
    /*
    * checking armstrong for n digits
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <stdbool.h>
    
    
    int main(int argc, char const *argv[])
    {
      int number, originalNumber, remainder, result = 0, n = 0;
    
    
      system("clear");
    
    
      bool test = true;
    
    
      while (test)
      {
        printf("Enter an integer: \n-> ");
      scanf("%d", &number);
    
    
      originalNumber = number;
    
    
      while (originalNumber != 0)
      {
        originalNumber /= 10;
        ++n;
      }
    
    
      originalNumber = number;
    
    
      while (originalNumber != 0)
      {
        remainder = originalNumber%10;
        result += pow(remainder, n);
        originalNumber /= 10;
      }
    
    
      if (result == number)
      {
        printf("%d's an armstrong number.\n", number);
      }
      else 
      {
        printf("%d is not an armstrong number.\n", number);
      }
    
    
      if (printf("Wanna check again?(y or n) \n"))
      {
        if (getchar() == 121)
        {
    
    
        } else 
        {
          test = false;
        }
      }
      }
    
    
      getchar();
      return 0;
    }

  2. #2
    Banned
    Join Date
    Aug 2017
    Posts
    861
    try checking your brackets. having that many you need to be sure to try and keep track of them and stuff
    Code:
         if (result == number)
        {
            printf("%d's an armstrong number.\n", number);
        }
        else
        {
            printf("%d is not an armstrong number.\n", number);
        }
        if (printf("Wanna check again?(y or n) \n"))
        {
            if (getchar() == 121)
            {
            } 
        else
            {    // right there shuts your loop down
                // put a printf in here to see for sure
                 printf("in just before setting test to false\n");
                test = false; 
            }
        }
      }
    your logic is a little off too. Now that I look at it closer.
    Code:
         if (result == number)
        {
            printf("%d's an armstrong number.\n", number);
        }
        else
        {
            printf("%d is not an armstrong number.\n", number);
        } // why is that in an if statement and no means to check what it is looking for?
        if (printf("Wanna check again?(y or n) \n"))
        {
            if (getchar() == 121)
            {
            } 
        else
            {    // right there shuts your loop down
                // put a printf in here to see for sure
                 printf("in just before setting test to false\n");
                test = false; 
            }
        }
      }
    Last edited by userxbw; 12-05-2017 at 09:23 AM.

  3. #3
    Banned
    Join Date
    Aug 2017
    Posts
    861
    still needs work, but I mostly fixed some of your logic
    Code:
    //Programming in C 
     
     
    /*
    * checking armstrong for n digits
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <stdbool.h>
    
    #include <ctype.h> // tolower
    
    
     
     
    int main(int argc, char const *argv[])
    {  
      int number, originalNumber, remainder, result = 0, n = 0;
      char what  = '\0'; // set to null 
     
      system("clear");
     
     
      bool test = true;
     
     
      while (test)
      {
            printf("Enter an integer: \n-> ");
            scanf("%d", &number);
            originalNumber = number;
            
        while (originalNumber != 0)
        {
            originalNumber /= 10;
            printf("1. loop orginal Number %d\n", originalNumber);
            ++n;
        }
        originalNumber = number;
        printf("2. loop orginal Number %d\n", originalNumber);
        while (originalNumber != 0)
        {
            remainder = originalNumber%10;
            result += pow(remainder, n);
            originalNumber /= 10;
            printf("3. loop orginal Number %d\n"
                    "result = %d\n"
                    "number %d\n", originalNumber, result,number);
        }
        if (result == number)
        {
            printf("%d's an armstrong number.\n", number);
        }
        else
        {
            printf("%d is not an armstrong number.\n"
                    "would you like to try another one? y/n\n", number);
                    what = getchar();
        }
        
        if (tolower(what) == 'n')
            test = false;
            
            
            /*
        {
            if (getchar() == 121)
            {
            } 
        else
            {    printf("in just before setting test to false\n");
                test = false;
            }
        }
        */
      } 
      getchar();
      return 0;
    }
    keep them printf in there then run it a few times to see what is really going on. Needs more work because you forgot something else as well when using loops and the same vars repeatedly. After you get it fixed try to make it look pretty.
    Last edited by userxbw; 12-05-2017 at 09:43 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Looping back to the begining & keep score
    By TemperingRocket in forum C Programming
    Replies: 1
    Last Post: 12-07-2015, 04:10 AM
  2. Can I use void to write a function to test for true or false?
    By soesbanditjim in forum C++ Programming
    Replies: 6
    Last Post: 06-26-2015, 10:30 AM
  3. if case isn't true then how do you go back
    By ingeniousreader in forum C Programming
    Replies: 2
    Last Post: 02-23-2012, 10:05 AM
  4. why do i always get true in the loop?
    By Masterx in forum C++ Programming
    Replies: 21
    Last Post: 09-13-2008, 01:20 PM
  5. best way to brake a while(TRUE) loop?
    By g1i7ch in forum C Programming
    Replies: 6
    Last Post: 07-10-2006, 02:58 AM

Tags for this Thread