c - For 循环在 C 中产生意外结果

标签 c loops for-loop cs50

我刚刚开始学习 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):

         #
        ##
       ###
      ####
     #####
    ######
   #######
  ########
 #########
##########

Try it!

关于c - For 循环在 C 中产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53090162/

相关文章:

Java:具有复合条件的for循环的异常行为

c - 在 C 中打印类型转换类型

java - Java无限循环

Python xml.etree.ElementTree - 如何引用我正在解析的当前节点

C++ 循环优化和一些错误

java - Android for循环等待点击事件计数器然后继续循环

javascript - For 循环不会将 i 变量传递给循环内的 Jquery 函数

c - 在c中使用单行代码进行字符串反转

c - 将数组作为参数传递给 C 中的函数

c - GCC C vector 扩展 : How to test the result of a comparison (for conditional assignment, 等)?