C Primer Plus第6章练习4

问题描述 投票:1回答:4

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

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

我现在还不确定该做什么。该错误是否是未更新的信件的结果?

c runtime-error
4个回答
2
投票

你的循环永远不会破坏,因为let < (let + row);总是如此!例如提示:1 < (1 + i)怎么样?


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)将溢出并且可以保持任何价值。这会导致未定义的行为,并且无法保证循环将结束。


1
投票

这有点

let < (let + row)

永远是真的吗?


0
投票

改成

for (let = 0; let <  row; let++) {
    printf("%c", ch + let);
}
ch += let;
© www.soinside.com 2019 - 2024. All rights reserved.