从循环内部切换状态机的状态
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。
我有一个数组 (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。