我已经编写了一个C函数,它打印一个由*+组成的正方形,如下所示:

 * + + + +
 * * + + +
 * * * + +
 * * * * +
 * * * * *

不过,这个功能运行得很好,但我不确定为什么它有MAX_LENGHT - 1个.

以下是我的代码:

void quadratoScalaPiu(int MAX_LENGHT) {
    
    printf("\nCaso 4\n\n");

    // Colonna
    for (int i = 0; i < MAX_LENGHT; i++) {   
            
        for (int j = 0; j <= i; j++) { 
            printf("* ");
        }
       
        for (int j = i; j < MAX_LENGHT - 1; j++) {
            printf("+ ");
        }

        printf("\n");

    }
}

如果有人能看看我的功能,告诉我这个谜团的原因,我会非常感激的.

如果有第二个for循环:(int j = i; j < MAX_LENGHT; j++)(不是MAX_LENGHT - 1),循环就会额外重复一次,这是不需要的.

我会有这样的输出:

* + + + + +
* * + + + +
* * * + + +
* * * * + + 
* * * * * +

推荐答案

第一个循环迭代到j == i.然后你的第二个循环又从j = i开始,所以有两个迭代来获得相同的值j.如果第二次迭代的限制是j < MAX_LENGHT,那么由于重复,您将得到一个额外的列.

不需要从MAX_LENGHT中减go ,只需从下一个值j而不是i开始第二个循环.

        int j;
        for(j = 0; j <= i; j++) { 
            printf("* ");
        }
       
        for(; j < MAX_LENGHT; j++) {
            printf("+ ");
        }

顺便说一句,你把"长度"拼错了.

C++相关问答推荐

GCC不警告隐式指针到整数转换'

为什么下面的C代码会进入无限循环?

在32位处理器上优化53—32位模计算>

括号中的堆栈实现错误问题

为什么可以通过指向常量int的指针间接地改变整数的值?

如何在C中打印包含扫描字符和整数的语句?

对重叠字符串使用MemMove

如何在CANbus RX/TX FIFO起始地址寄存器(ATSAME 51)的特定地址初始化数组?

C堆栈(使用动态数组)realloc内存泄漏问题

Wcstok导致分段故障

我在C程序的Flex/Bison中遇到语法错误

如何使这个While循环在新行上结束

如何读取程序中嵌入的数据S自己的ELF?

问题:C#Define上的初始值设定项元素不是常量

如何在C中计算包含递增和递减运算符的逻辑表达式?

C 错误:对 int 数组使用 typedef 时出现不兼容的指针类型问题

SSE 向量与 Epsilon 的比较

如何向 execl 创建的后台程序提供输入?

比 * 更快的乘法

设置具有非零终止字符串的大整数