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 Offline
    T Offline
    Tarun Jha
    wrote on last edited by
    #1

    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;
    

    }

    L _ T M A 5 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;
      

      }

      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #2

      After entering the first digit you increment i to the next empty cell in the num array. So when you get to the end of the block the expression while(num[i]!=0); is false, and the loop ends. This may not always be the case with an array that is not initialised. You should check the number at the time that it is entered and exit when that is zero.

      T 1 Reply Last reply
      0
      • L Lost User

        After entering the first digit you increment i to the next empty cell in the num array. So when you get to the end of the block the expression while(num[i]!=0); is false, and the loop ends. This may not always be the case with an array that is not initialised. You should check the number at the time that it is entered and exit when that is zero.

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

        can you write the correct code. please!

        L G 2 Replies Last reply
        0
        • T Tarun Jha

          can you write the correct code. please!

          L Offline
          L Offline
          Lost User
          wrote on last edited by
          #4

          I have explained what you need to do, and where to do it. Please try for yourself, you will learn so much more.

          T 1 Reply Last reply
          0
          • L Lost User

            I have explained what you need to do, and where to do it. Please try for yourself, you will learn so much more.

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

            Did it. Thank you.

            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;
              

              }

              _ Offline
              _ Offline
              _Superman_
              wrote on last edited by
              #6

              One more thing that I would like to add is that you should initialize variable i to 0.

              «_Superman_»  _I love work. It gives me something to do between weekends.

              _Microsoft MVP (Visual C++) (October 2009 - September 2013)

              Polymorphism in C

              T 1 Reply Last reply
              0
              • _ _Superman_

                One more thing that I would like to add is that you should initialize variable i to 0.

                «_Superman_»  _I love work. It gives me something to do between weekends.

                _Microsoft MVP (Visual C++) (October 2009 - September 2013)

                Polymorphism in C

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

                thank you

                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;
                  

                  }

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

                  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 G 2 Replies 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; }

                    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