从循环内部切换状态机的状态

Switching the status of a state machine from inside a loop

我有一个数组 (nchar[12]),我编写了这段代码将其打印为由 "X" 组成的垂直列。

我首先编写了一个带有累加器和 while 循环的版本,它运行良好,但它只能打印给定限制的列。

然后我试着把它写成一个状态机,但是输出的只是一串没完没了的空格。

我把status声明为一个int,赋值1,然后:

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

当它没有为最后处理的行找到任何要打印的值时应该停止,但它会一直持续下去,我不明白为什么。

循环永远不会结束,因为 = 是赋值运算符而不是 ==,后者是比较运算符。你可能想要

while (status == 1)

或者干脆

while (status)

而不是

while (status = 1)

此外,如果您有一个数组声明为

type nchar[12];

那么它的有效索引从 0 开始到 11 结束。所以,你的循环应该从 i=0 开始并且应该循环直到 i<12 变为 false。