使用嵌套循环生成以下内容
A
BC
DEF
GHIJ
KLMNO
PQRSTU
这是我到目前为止所拥有的。我最终得到一个讨厌的运行时错误。
#include <stdio.h>
int main(void) {
int row;
char let;
char ch = 'A';
for (row = 1; row <= 6; row++) {
for (let = ch; let < (let + row); let++) {
printf("%c", let);
}
ch = let;
printf("\n");
}
return 0;
}
我现在还不确定该做什么。该错误是否是未更新的信件的结果?
你的循环永远不会破坏,因为let < (let + row);
总是如此!例如提示:1 < (1 + i)
怎么样?
更改
for (let = ch; let < (let + row); let++)
至
for (let = ch; let < (ch + row); let++)
否则,你得到一个无限循环,因为let < (let + row)
永远不会是假的。这可能因编译器而异。 C标准没有规定let
是unsigned char
还是signed char
。所以由编译器决定它。
如果let
是unsigned char
,那么循环将循环并最终,(let+row)
将环绕(由于溢出)到值0然后,循环结束。
如果let
是signed char
,那么最终,(let+row)
将溢出并且可以保持任何价值。这会导致未定义的行为,并且无法保证循环将结束。
这有点
let < (let + row)
永远是真的吗?
改成
for (let = 0; let < row; let++) {
printf("%c", ch + let);
}
ch += let;