C初级读物加上第6章练习4
使用嵌套循环生成以下内容C初级读物加上第6章练习4,c,runtime-error,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); le
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;
}
#包括
内部主(空){
int行;
煤焦;
char ch='A';
对于(row=1;row你的循环永远不会因为条件而中断let<(let+row);
总是正确的!例如提示:你的循环怎么能1
?你的循环永远不会因为条件let<(let+row);
总是正确的!例如提示:怎么能1
?是这个位
let < (let + row)
let<(let+行)
永远都是真的吗?这是真的吗
let < (let + row)
let<(let+行)
永远是真的吗?改变
for (let = ch; let < (let + row); let++)
for(let=ch;let<(let+row);let++)
到
for(let=ch;let<(ch+行);let++)
否则,您将得到一个无限循环,因为let<(let+row)
永远不会为false。这可能因编译器而异。C标准没有指定let
是无符号字符还是有符号字符
。因此,这取决于编译器
如果let
是无符号字符
,则循环将循环,最后,(let+row)
将(由于溢出)环绕到值0,然后循环结束。
如果let
是一个有符号字符
,那么最终,(let+row)
将溢出并可以保存任何值。这会导致未定义的行为,无法保证循环是否结束。更改
for (let = ch; let < (let + row); let++)
for(let=ch;let<(let+row);let++)
到
for(let=ch;let<(ch+行);let++)
否则,您将得到一个无限循环,因为let<(let+row)
永远不会为false。这可能因编译器而异。C标准没有指定let
是无符号字符还是有符号字符
。因此,这取决于编译器
如果let
是无符号字符
,则循环将循环,最后,(let+row)
将(由于溢出)环绕到值0,然后循环结束。
如果let
是一个signed char
,那么最终,(let+row)
将溢出并可以保存任何值。这将导致未定义的行为,并且无法保证循环是否结束。更改为
for (let = 0; let < row; let++) {
printf("%c", ch + let);
}
ch += let;
for(let=0;let|
更改为
for (let = 0; let < row; let++) {
printf("%c", ch + let);
}
ch += let;
for(let=0;let|
@segarci,OP提到他有一个运行时error@CoolGuy-运行时错误有很多特点“此时不确定该做什么”-调试将是一个很好的开始。这一次你甚至不需要正式的调试器。一支铅笔、一张纸和三列将很快显示轮子从哪里掉下来。@EdHeal,你的意思是一旦出现运行时错误,任何事情都可能发生?@Coolgay-我没有这么说。运行时错误可能是内存不足、堆栈溢出、浮动点溢出,内存泄漏,。@segarci,OP提到他有一个运行时error@CoolGuy-运行时错误有很多特点“此时不确定该做什么”-调试将是一个很好的开始。这一次你甚至不需要正式的调试器。一支铅笔、一张纸和三列将很快显示轮子从哪里掉下来。@EdHeal,你的意思是一旦出现运行时错误,任何事情都可能发生?@Coolgay-我没有这么说。运行时错误可能是内存不足、堆栈溢出、浮动点溢出、内存泄漏等。您应该详细说明OP问题。您应该详细说明OP问题。这取决于他的编译器是否提供有符号或无符号char
类型。C标准没有指定。这取决于他的编译器是否提供有符号或无符号char
类型。C标准没有指定fy.这取决于他的编译器提供的是有符号的还是无符号的char
类型。C标准没有指定。这取决于他的编译器提供的是有符号的还是无符号的char
类型。C标准没有指定。这取决于他的编译器提供的是有符号的还是无符号的char
类型esn不指定。@BenVoigt,因此如果let
是一个unsigned char
,那么循环将很快结束,如果let
是signed
,那么它将是UB?这取决于他的编译器提供的是有符号的还是无符号的char
类型。C标准没有指定。@BenVoigt,所以如果let
是一个un签名字符
,那么循环将很快结束,如果let
是签名的
,那么它将是UB?