Problem with infinite loop in c program

AI Thread Summary
The discussion centers on a programming issue involving an infinite loop caused by a mistake in an if-else structure. The code snippet provided contains an error in the condition of an else if statement, where a single equals sign is used for assignment instead of a double equals sign for comparison. This leads to the variable j being assigned a value rather than being compared, resulting in the loop not terminating as expected. The importance of enabling compiler warnings to catch such common mistakes is emphasized, as it can help identify issues that may lead to infinite loops or other logical errors in the code.
colt
Messages
20
Reaction score
0
Hi, I have a program that is entering a infinite loop in the last if else of this loop. The program is printing 3 endless times. Here is the code that generates it:
Code:
 else {
    for (j=1;j<n;j++) {
      if (j<=(n/2)) {
        a[1][j] = j-1;
        printf ("%d", a[1][j]);
      }
      else if (j=(n/2)+1) {
        a[1][j] = a[1][j-1];
        printf ("%d", a[1][j]); 
        //printf ("%d", j);
        //break;
      }
      else if  {
         
        a[1][j] = a[1][j-1]-1;
        printf ("%d", a[1][j]);
        break;  
      }
    }

The three should be printed twice in a row, once by the if and the second time by the middle else if. Then the else should print decreasing values until the for loop end.
So, I don't understand why this is happening . J value it is 5 when it leaves the middle else if, which it is the correct value. Then it should not enter the last "else" in this iteration, since j needs to be bigger than (n/2)+1, which I expect to be (9/2)+1, which should be rounded to 5, so j should enter the last else only in the next iteration when it's value should be 6 and keep entering it for two more iterations, until it reaches the value of 9, which should end the for loop.

Here is the link for the full code in the case someone can compile it:
http://codepad.org/66MYRyRQ

Thanks for any input.
 
Technology news on Phys.org
What are you trying to do?

This code is very very difficult to read.
 
The code you entered is not the same as your code at codepad.org. The code you entered at this site isn't valid code. However, the bug is still present. Here it is:

else if (j=(n/2)+1) ...

You used a single '=' sign rather than two. With two you are comparing but with one you are assigning. You are assigning a value to j, and hence the infinite loop.

A good compiler will tell you about this common mistake if you let it do so. Enable all common warnings when compiling and then pay attention to those warnings.
 
  • Like
Likes 1 person
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...
Back
Top