Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C for循环中的基本增加/减少问题_C - Fatal编程技术网

C for循环中的基本增加/减少问题

C for循环中的基本增加/减少问题,c,C,只是在网上上一门课,试着做一个类似倒三角的作业。我可以在python中实现这一点,但由于某种原因,在C中它对我不起作用,特别是for循环的一部分,其中应该减少k值。在其他空白项目中也尝试过,只是为了验证问题,但到目前为止,它对我不起作用。递增(j循环)有效,但出于某种原因递减(k循环)无效(同样适用于所有语法选项:k=k-1;k-=1;k--) 不知道哪里会出问题 int main(void){ int height, i, j, k; bool check = false; wh

只是在网上上一门课,试着做一个类似倒三角的作业。我可以在python中实现这一点,但由于某种原因,在C中它对我不起作用,特别是for循环的一部分,其中应该减少k值。在其他空白项目中也尝试过,只是为了验证问题,但到目前为止,它对我不起作用。递增(j循环)有效,但出于某种原因递减(k循环)无效(同样适用于所有语法选项:k=k-1;k-=1;k--)

不知道哪里会出问题

int main(void){
   int height, i, j, k;
   bool check = false;

while (check == false)
{
    height = get_int("Height: ");

    if (height >= 1 && height <= 8)
    {
        for (i = 0; i < height; i++)
        {
            for (k = height -2; k >=0; k--)
            {
                printf(".");
            }
            for (j = 0; j <= i; j++)
            {
                printf("#");
            }
            printf("\n");
        }
        check = true;
    }
}}
这是实际输出

....#
....##
....###
....#####
....###### 

在第二个循环中,
k
需要是
=i
,而不是
=0
。我用
5
替换了
get\u int

int main(void){
int height, i, j, k;
bool check = false;

while (check == false)
{
    height = 5;

    if (height >= 1 && height <= 8)
    {
        for (i = 0; i < height; i++)
        {
          for (k = height -2; k >= i; k--)
          {
            printf(".");
          }
          for (j = 0; j <= i; j++)
          {
            printf("#");
          }
          printf("\n");
    }
    check = true;
}
}}

在第二个循环中,
k
需要是
=i
,而不是
=0
。我用
5
替换了
get\u int

int main(void){
int height, i, j, k;
bool check = false;

while (check == false)
{
    height = 5;

    if (height >= 1 && height <= 8)
    {
        for (i = 0; i < height; i++)
        {
          for (k = height -2; k >= i; k--)
          {
            printf(".");
          }
          for (j = 0; j <= i; j++)
          {
            printf("#");
          }
          printf("\n");
    }
    check = true;
}
}}

构建输出时,变量<代码>高度永远不会更改。你总是从k=3开始。您希望输出的
的数量如何变化


打印
时,请尝试使用变量
i

在构建输出时,变量
高度
永远不会改变。你总是从k=3开始。您希望输出的
的数量如何变化


打印
时,请尝试使用变量
i

只需将for循环语句更改为

for (k = height - 1; k >=i; k--)
k索引必须从'height'-1开始,到i变量结束


因此,对于height=5,第一个内部for循环将执行5次,当i增加1时,内部for循环将执行负1次,依此类推。

只需将for循环语句更改为

for (k = height - 1; k >=i; k--)
k索引必须从'height'-1开始,到i变量结束


因此,对于height=5,第一个内部for循环将执行5次,当i增加1时,内部for循环将执行负1次,依此类推。

k的值正在减小,但k的for循环运行的范围保持不变,因为输入变量height没有改变。因此,它总是打印4个(高度-2+1)点。要了解更多信息,请参见以下步骤:

input->height 5
i = 0, printing four dots for k = 3,2,1,0. printing one '#' for j=0
i = 1, printing four dots for k = 3,2,1,0. printing two '#' for j=0,1
i = 2, printing four dots for k = 3,2,1,0. printing three '#' for j=0,1,2
i = 3, printing four dots for k = 3,2,1,0. printing four '#' for j=0,1,2,3
i = 4, printing four dots for k = 3,2,1,0. printing five '#' for j=0,1,2,3,4
输入->高度5
i=0,为k=3,2,1,0打印四个点。为j=0打印一个“#” i=1,为k=2,1,0打印三个点。为j=0,1打印两个“#” i=2,为k=1,0打印两个点。为j=0,1,2打印三个“#” i=3,为k=0打印一个点。为j=0,1,2,3打印四个“#” i=4,为k=打印零点。为j=0,1,2,3,4打印五个“#”
k的值正在减小,但是k的for循环运行的范围保持不变,因为输入变量height没有改变。因此,它总是打印4个(高度-2+1)点。要了解更多信息,请参见以下步骤:

input->height 5
i = 0, printing four dots for k = 3,2,1,0. printing one '#' for j=0
i = 1, printing four dots for k = 3,2,1,0. printing two '#' for j=0,1
i = 2, printing four dots for k = 3,2,1,0. printing three '#' for j=0,1,2
i = 3, printing four dots for k = 3,2,1,0. printing four '#' for j=0,1,2,3
i = 4, printing four dots for k = 3,2,1,0. printing five '#' for j=0,1,2,3,4
输入->高度5
i=0,为k=3,2,1,0打印四个点。为j=0打印一个“#” i=1,为k=2,1,0打印三个点。为j=0,1打印两个“#” i=2,为k=1,0打印两个点。为j=0,1,2打印三个“#” i=3,为k=0打印一个点。为j=0,1,2,3打印四个“#” i=4,为k=打印零点。为j=0,1,2,3,4打印五个“#”
发布的解决方案似乎比可能的更复杂。您只需将所有行打印到所需的高度,然后在每行的开头找到一种方法,以减少打印的
'。

#include <stdio.h>

void draw_triangles(int height, char upper_left, char bottom_right)
{
    if (height < 1  ||  height > 8)
        return;

    for (int row = 0; row < height; ++row)
    {
        // Calculate how many chars are in the left side of each row
        int edge = height - row - 1;
        for ( int i = 0; i < edge; ++i )
            putchar(upper_left);

        for ( int i = edge; i < height; ++i)
            putchar(bottom_right);

        putchar('\n');
    }
}

int main(void)
{
    // Let's test it
    for (int i = 0; i <= 10; ++i)
    {
        printf("%d:\n", i);
        draw_triangles(i, '.', '#');
        puts("");
    }
}
#包括
空心绘制三角形(整数高度,字符左上角,字符右下角)
{
如果(高度<1 | |高度>8)
返回;
对于(int行=0;行<高度;++行)
{
//计算每行左侧的字符数
int edge=高度-第1行;
对于(int i=0;i对于(int i=0;i而言,发布的解决方案似乎比可能的更复杂。您只需将所有行打印到要求的高度,然后在每行的开头找到打印数量减少的

#include <stdio.h>

void draw_triangles(int height, char upper_left, char bottom_right)
{
    if (height < 1  ||  height > 8)
        return;

    for (int row = 0; row < height; ++row)
    {
        // Calculate how many chars are in the left side of each row
        int edge = height - row - 1;
        for ( int i = 0; i < edge; ++i )
            putchar(upper_left);

        for ( int i = edge; i < height; ++i)
            putchar(bottom_right);

        putchar('\n');
    }
}

int main(void)
{
    // Let's test it
    for (int i = 0; i <= 10; ++i)
    {
        printf("%d:\n", i);
        draw_triangles(i, '.', '#');
        puts("");
    }
}
#包括
空心绘制三角形(整数高度,字符左上角,字符右下角)
{
如果(高度<1 | |高度>8)
返回;
对于(int行=0;行<高度;++行)
{
//计算每行左侧的字符数
int edge=高度-第1行;
对于(int i=0;i对于(int i=0;我请给我们输入/输出示例。
j
循环依赖于
i
,而
k
循环则不依赖。似乎
k
循环也应该依赖于
i
。每行上的
输出数相同。
。请同时添加Python代码…否则我们无法比较差异。@Draginko请使用问题的编辑功能添加新信息。请给我们输入/输出示例。
j
loop依赖于
i
,而
k
循环则不依赖。似乎
k
循环也应该依赖于
i
。有每行上输出相同数量的
height-1
)。请同时添加Python代码……否则我们无法比较差异。@Draginko请使用问题的编辑功能添加新信息。非常感谢……我发现有两种可能的方法可以解决此问题,一种是将0更改为I,另一种是初始化k=height-I-2……它们之间的差异是什么?或者只需要to以某种方式将变量i包含到循环中?如果算法保持不变……您可以使用