Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. While loop not working on C.

While loop not working on C.

Scheduled Pinned Locked Moved C / C++ / MFC
data-structures
18 Posts 7 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Tarun Jha

    THE WORKING CODE

    Quote:

    #include #include int main(){ int num[50], i=0, j; int count = 0; printf("Enter your integer: \n"); do{ scanf(" %d", &num[i]); i++; count++; }while(num[i-1]!=0); for(j=1; j<= count-1; j++){ if(num[0] < num[j]){ num[0] = num[j]; } } printf("%d is the greatest of them all !", num[0]); return 0; }

    D Offline
    D Offline
    David Crow
    wrote on last edited by
    #9

    Suggestions: 1) The variable count is not necessary. You can use i instead. 2) The separate for() loop is not necessary. You can do the min/max checking in the while() loop.

    "One man's wage rise is another man's price increase." - Harold Wilson

    "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

    "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

    1 Reply Last reply
    0
    • T Tarun Jha

      In this program i have tried to store all the input in the array. The while should continue till the user input 0, but the loop exits only after one input.

      #include
      #include

      int main(){

      int num\[50\], i, j;
      int count = 0;
      
      printf("Enter your integer: \\n");
      
      do{
      	scanf(" %d", &num\[i\]);
      	i++;
      	count++;
      	
      }while(num\[i\]!=0);
      
      for(j=1; j<= count; j++){
      	
      	if(num\[1\] > num\[j\]){
      		num\[1\] = num\[j\];
      	}
      }
      
      printf("%d is the greatest of them all !", num\[0\]);
      
      return 0;
      

      }

      M Offline
      M Offline
      Manish K Agarwal
      wrote on last edited by
      #10

      here you go

      #include
      #include

      int main(){

      int num\[50\], i = -1, j;
      int count = 0;
      
      printf("Enter your integer: \\n");
      
      do{
      	scanf(" %d", &num\[i+1\]);
      	i++;
      	count++;
      	
      }while(num\[i\]!=0);
      
      for(j=1; j<= count; j++){
      	
      	if(num\[1\] > num\[j\]){
      		num\[1\] = num\[j\];
      	}
      }
      
      printf("%d is the greatest of them all !", num\[0\]);
      
      return 0;
      

      }

      T D 2 Replies Last reply
      0
      • T Tarun Jha

        In this program i have tried to store all the input in the array. The while should continue till the user input 0, but the loop exits only after one input.

        #include
        #include

        int main(){

        int num\[50\], i, j;
        int count = 0;
        
        printf("Enter your integer: \\n");
        
        do{
        	scanf(" %d", &num\[i\]);
        	i++;
        	count++;
        	
        }while(num\[i\]!=0);
        
        for(j=1; j<= count; j++){
        	
        	if(num\[1\] > num\[j\]){
        		num\[1\] = num\[j\];
        	}
        }
        
        printf("%d is the greatest of them all !", num\[0\]);
        
        return 0;
        

        }

        A Offline
        A Offline
        asa76
        wrote on last edited by
        #11

        The first problem is that the variable i has not been initialized. The second problem is that you are checking the wrong array index. See the comments in the modified version of your code below.

        #include #include int main(){

        int num\[50\], i, j;
        int count = 0;
        
        i = 0;  // Added this
        printf("Enter your integer: \\n");
        
        do{
        	scanf(" %d", &num\[i\]);
        	count++;
        	
        }while(num\[i++\]!=0);  // Changed this
        
        for(j=1; j<= count; j++){
        	
        	if(num\[1\] > num\[j\]){
        		num\[1\] = num\[j\];
        	}
        }
        
        printf("%d is the greatest of them all !", num\[0\]);
        
        return 0;
        

        }

        D 1 Reply Last reply
        0
        • T Tarun Jha

          can you write the correct code. please!

          G Offline
          G Offline
          geodoom
          wrote on last edited by
          #12

          First suspicious point : you declare i but you do not initialize it (you also declare j but at least you plan to initialize it in the for loop so it is acceptable). Second suspicious point: you are to hasty to increment i. If you want to insist using a

          do {
          ...
          } while (condition)

          loop , and not a

          while (condition)
          { ... }

          then you must realize that you need to check the value just read (if it was zero) and then , if it not 0 , meaning the user want to keep giving values , increase i++ , getting ready for reading the next element. Try to implement those 2 points , and also as an extra exercise , implement the while(condition) { ... } It is not hard, you can do it in around half an hour or less, and you will benefit a lot by pondering on how it will differ from your do { ... } while(condition)

          T 1 Reply Last reply
          0
          • A asa76

            The first problem is that the variable i has not been initialized. The second problem is that you are checking the wrong array index. See the comments in the modified version of your code below.

            #include #include int main(){

            int num\[50\], i, j;
            int count = 0;
            
            i = 0;  // Added this
            printf("Enter your integer: \\n");
            
            do{
            	scanf(" %d", &num\[i\]);
            	count++;
            	
            }while(num\[i++\]!=0);  // Changed this
            
            for(j=1; j<= count; j++){
            	
            	if(num\[1\] > num\[j\]){
            		num\[1\] = num\[j\];
            	}
            }
            
            printf("%d is the greatest of them all !", num\[0\]);
            
            return 0;
            

            }

            D Offline
            D Offline
            David Crow
            wrote on last edited by
            #13

            asa76 wrote:

            for(j=1; j<= count; j++)
            {
            if (num[1] > num[j])
            {
            num[1] = num[j];
            }
            }

            printf("%d is the greatest of them all !", num[0]);

            You do realize this is wrong, don't you?

            "One man's wage rise is another man's price increase." - Harold Wilson

            "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

            "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

            1 Reply Last reply
            0
            • G geodoom

              First suspicious point : you declare i but you do not initialize it (you also declare j but at least you plan to initialize it in the for loop so it is acceptable). Second suspicious point: you are to hasty to increment i. If you want to insist using a

              do {
              ...
              } while (condition)

              loop , and not a

              while (condition)
              { ... }

              then you must realize that you need to check the value just read (if it was zero) and then , if it not 0 , meaning the user want to keep giving values , increase i++ , getting ready for reading the next element. Try to implement those 2 points , and also as an extra exercise , implement the while(condition) { ... } It is not hard, you can do it in around half an hour or less, and you will benefit a lot by pondering on how it will differ from your do { ... } while(condition)

              T Offline
              T Offline
              Tarun Jha
              wrote on last edited by
              #14

              i will try. thank you

              1 Reply Last reply
              0
              • M Manish K Agarwal

                here you go

                #include
                #include

                int main(){

                int num\[50\], i = -1, j;
                int count = 0;
                
                printf("Enter your integer: \\n");
                
                do{
                	scanf(" %d", &num\[i+1\]);
                	i++;
                	count++;
                	
                }while(num\[i\]!=0);
                
                for(j=1; j<= count; j++){
                	
                	if(num\[1\] > num\[j\]){
                		num\[1\] = num\[j\];
                	}
                }
                
                printf("%d is the greatest of them all !", num\[0\]);
                
                return 0;
                

                }

                T Offline
                T Offline
                Tarun Jha
                wrote on last edited by
                #15

                thank you.

                1 Reply Last reply
                0
                • T Tarun Jha

                  THE WORKING CODE

                  Quote:

                  #include #include int main(){ int num[50], i=0, j; int count = 0; printf("Enter your integer: \n"); do{ scanf(" %d", &num[i]); i++; count++; }while(num[i-1]!=0); for(j=1; j<= count-1; j++){ if(num[0] < num[j]){ num[0] = num[j]; } } printf("%d is the greatest of them all !", num[0]); return 0; }

                  G Offline
                  G Offline
                  geodoom
                  wrote on last edited by
                  #16

                  Since you present a working solution you deserve to receive some more elegant alternatives. Here is how I improved your code , there are some nice tricks for you to learn from it

                  #include
                  #define SIZE 15
                  int main()
                  {
                  int num[SIZE], i=0 , max;
                  int count = 0; // be sure that we do not read more than 15 elements
                  printf("Enter your integers seperated by Enter (give 0 to finish input): \n");
                  /*
                  scanf(" %d", &num[i]);
                  while (num[i]!=0 && count < SIZE )
                  {
                  ++count;
                  scanf(" %d", &num[++i]);
                  }
                  */
                  /* Either the above while loop */
                  do{
                  scanf(" %d", &num[i]);
                  count++;
                  } while(num[i++]!=0 && count < SIZE);
                  /* Or the above do { } while loop */
                  max = num[0]; /* Avoid to altert any of your array elements */
                  for(i=1; i< count; i++)
                  if(max < num[i]) max = num[i]; /* each time we find a better max, update our max value */
                  printf("%d is the greatest of them all !\n", max);
                  return 0;
                  }

                  I have deliberately put a smaller array of 15 elements so you can test what happens if you really try to input more than 15 elements. And if you are more lazy , you can even change it to 7 elements , you only have to go to one place and do your modification now , SIZE ! Also , comment the do-while block and uncomment the while block , and compile and run again the program with various values (pay attention to provide the max at the 1st and last positions at many of your tests) . Modify everything that you do not understand ehy it is like it is [for example change the pre-increments ++i and ++count that I use , with post-increments i++ , count++ , and compile/run/test with edge cases (max given at 1st and last positions) to see what wrong things happen ].

                  T 1 Reply Last reply
                  0
                  • G geodoom

                    Since you present a working solution you deserve to receive some more elegant alternatives. Here is how I improved your code , there are some nice tricks for you to learn from it

                    #include
                    #define SIZE 15
                    int main()
                    {
                    int num[SIZE], i=0 , max;
                    int count = 0; // be sure that we do not read more than 15 elements
                    printf("Enter your integers seperated by Enter (give 0 to finish input): \n");
                    /*
                    scanf(" %d", &num[i]);
                    while (num[i]!=0 && count < SIZE )
                    {
                    ++count;
                    scanf(" %d", &num[++i]);
                    }
                    */
                    /* Either the above while loop */
                    do{
                    scanf(" %d", &num[i]);
                    count++;
                    } while(num[i++]!=0 && count < SIZE);
                    /* Or the above do { } while loop */
                    max = num[0]; /* Avoid to altert any of your array elements */
                    for(i=1; i< count; i++)
                    if(max < num[i]) max = num[i]; /* each time we find a better max, update our max value */
                    printf("%d is the greatest of them all !\n", max);
                    return 0;
                    }

                    I have deliberately put a smaller array of 15 elements so you can test what happens if you really try to input more than 15 elements. And if you are more lazy , you can even change it to 7 elements , you only have to go to one place and do your modification now , SIZE ! Also , comment the do-while block and uncomment the while block , and compile and run again the program with various values (pay attention to provide the max at the 1st and last positions at many of your tests) . Modify everything that you do not understand ehy it is like it is [for example change the pre-increments ++i and ++count that I use , with post-increments i++ , count++ , and compile/run/test with edge cases (max given at 1st and last positions) to see what wrong things happen ].

                    T Offline
                    T Offline
                    Tarun Jha
                    wrote on last edited by
                    #17

                    Thank you very much.. :)

                    1 Reply Last reply
                    0
                    • M Manish K Agarwal

                      here you go

                      #include
                      #include

                      int main(){

                      int num\[50\], i = -1, j;
                      int count = 0;
                      
                      printf("Enter your integer: \\n");
                      
                      do{
                      	scanf(" %d", &num\[i+1\]);
                      	i++;
                      	count++;
                      	
                      }while(num\[i\]!=0);
                      
                      for(j=1; j<= count; j++){
                      	
                      	if(num\[1\] > num\[j\]){
                      		num\[1\] = num\[j\];
                      	}
                      }
                      
                      printf("%d is the greatest of them all !", num\[0\]);
                      
                      return 0;
                      

                      }

                      D Offline
                      D Offline
                      David Crow
                      wrote on last edited by
                      #18

                      See here.

                      "One man's wage rise is another man's price increase." - Harold Wilson

                      "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                      "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups