C Primer Plus第6章练习4

时间:2014-12-26 10:11:55

标签: c runtime-error

使用嵌套循环生成以下内容

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;
}

我现在还不确定该做什么。是错误的结果 这封信没有更新?

4 个答案:

答案 0 :(得分:2)

你的循环永远不会中断,条件let < (let + row);总是如此!例如提示:如何1 < (1 + i) ??

答案 1 :(得分:2)

更改

for (let = ch; let < (let + row); let++)

for (let = ch; let < (ch + row); let++)

或者,你得到一个无限循环,因为let < (let + row)永远不会是假的。这可能因编译器而异。 C标准未指定letunsigned char还是signed char。所以由编译器决定它。

如果letunsigned char,那么循环将循环,最终,(let+row)将(由于溢出)回绕到值0,然后循环结束。登记/> 如果letsigned char,那么最终(let+row)会溢出并保留任何值。这会导致未定义的行为,并且无法保证循环将结束。

答案 2 :(得分:1)

这位

let < (let + row)

永远是真的吗?

答案 3 :(得分:0)

更改为

for (let = 0; let <  row; let++) {
    printf("%c", ch + let);
}
ch += let;