Search code examples
carraysstate-machinekernighan-and-ritchie

Switching the status of a state machine from inside a loop


I have an array (nchar[12]) and I wrote this code to print it as vertical columns composed of "X"'s.

I first wrote a version with an accumulator and a while-loop and it worked fine, but it only could print colums as long as a given limit.

Then I tried to write it as a state machine, but the output is just an endless series of blank spaces.

I declared status as an int and assigned a value of 1 to it, then:

while (status = 1) {
    for (i = 1; i <= 12; ++i) {
        status = 0;
        if (nchar[i] > 0) {
            printf("  X");
            --nchar[i];
            status = 1;
        }
        else
            printf("   ");
    }

It should stop when it doesn't find any value to print for the last processed line, but it just goes on forever and I don't understand why.


Solution

  • The loop never ends because = is the assignment operator not == which is the comparision operator. You probably want

    while (status == 1)
    

    Or simply

    while (status)
    

    instead of

    while (status = 1)
    

    Also if you have an array declared as

    type nchar[12];
    

    then the valid indices for it start from 0 and end at 11. So, your loop should start with i=0 and should loop until i<12 becomes false.