我刚刚开始学习 cs50 类(class),但在第一个问题表上遇到了麻烦。目的是产生正确对齐的步骤(您在《马里奥》中在完成关卡并跳上旗杆之前使用的步骤)。
我编写的代码生成步骤,但未右对齐。
但是为什么我的代码会产生这些步骤?由于执行第二个 for 循环时 i = j,第二个 for 循环的条件不应该始终为 false 吗?
很抱歉,如果之前已经回答过这个问题,但我无法清楚地表达我的问题。
#include <stdio.h>
#include <cs50.h>
int main(){
int height = get_int("How tall are the pyramids: ");
for (int i = 0; i < height; i++){
printf("##");
for (int j = 0; j < i; j++){
printf("#");
}
printf("\n");
}
}
最佳答案
很好的尝试;但是,您需要在步骤之前打印一系列空格,以实现右对齐。这不一定很明显,因为空格是不可见的(并且对于左对齐三角形来说是不必要的)。
要打印的空格数的公式为 height - row_number - 1
,要打印的步骤字符数的公式为 row_number + 1
(或column_number <= row_number
)。我建议尝试使用这些数字并尝试产生不同的模式,这将有助于您的理解。额外的原因-1
/+1
偏移是为了避免在三角形上方打印空行。
要回答有关第二个循环终止条件的问题,只有当您打印的步骤字符数小于行号时,它才会为假,而第一个循环则与此相反。
#include <stdio.h>
#include <cs50.h>
int main() {
int height = get_int("How tall are the pyramids: ");
for (int i = 0; i < height; i++) {
for (int j = 0; j < height - i - 1; j++) {
printf(" ");
}
for (int j = 0; j <= i; j++) {
printf("#");
}
printf("\n");
}
}
输出(高度 = 10):
#
##
###
####
#####
######
#######
########
#########
##########
关于c - For 循环在 C 中产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53090162/