for循环中的变量在同一循环中具有不同的值(C语言)

for循环中的变量在同一循环中具有不同的值(C语言),c,loops,for-loop,printf,C,Loops,For Loop,Printf,在这些循环中,我有两个不同的值,我不知道为什么会这样,因为我没有增加它的大小。我在两个循环中都打印I,但是在内部循环中打印I时,它的值更大,在外部循环中它应该具有的值也更大 编辑:删除了描述,我只用相关信息重写了它 你能告诉我为什么会这样吗 int position = 0; int size = 4; for (int i = 0; i < size; i++) { for (int j = 0; j < position; j++) { prin

在这些循环中,我有两个不同的值,我不知道为什么会这样,因为我没有增加它的大小。我在两个循环中都打印I,但是在内部循环中打印I时,它的值更大,在外部循环中它应该具有的值也更大

编辑:删除了描述,我只用相关信息重写了它

你能告诉我为什么会这样吗

int position = 0;
int size = 4;

for (int i = 0; i < size; i++)
{
    for (int j = 0; j < position; j++)
    {
        printf("    i = %d\n", i);
    }

    position++;

    printf("i = %d\n", i);
}

printf("\n");
而所需的输出应为:

i = 0
i = 1
    i = 1
i = 2
    i = 2
    i = 2
i = 3
    i = 3
    i = 3
    i = 3

这是因为您已使用
位置创建了一个奇数变量循环条件。在
i
for循环中的第一圈,它跳过内环,然后将位置增加1并打印i=0。然后下一圈当
i
为1时,它执行内部循环,依此类推


这就是为什么在
循环中使用不断变化的条件是一个坏主意,因为这会使代码更难理解

要使循环中的代码至少执行一次,可以使用do while循环。我先给你换了。此外,在循环之前打印一个未插入的
i
,可以获得所需的输出

int position = 0;
int size = 4;

for (int i = 0; i < size; i++)
{
    printf("i = %d\n", i);

    int j = 0;
    do {
        printf("    i = %d\n", i);
        j++;
    } while (j < position);

    position++;
}

printf("\n");
int位置=0;
int size=4;
对于(int i=0;i
编辑:啊,我明白了,你又一次改变了你想要的输出!这使得至少不再需要执行代码的条件。常规的while循环可以实现以下功能:

int position = 0;
int size = 4;

for (int i = 0; i < size; i++)
{
    printf("i = %d\n", i);

    int j = 0;
    while (j < position) {
        printf("    i = %d\n", i);
        j++;
    }

    position++;
}

printf("\n");
int位置=0;
int size=4;
对于(int i=0;i
只需将变量
i
的输出置于内部循环之前

#include <stdio.h>

int main(void) 
{
    int position = 0;
    int size = 4;

    for (int i = 0; i < size; i++)
    {
        printf("i = %d\n", i);

        for (int j = 0; j < position; j++)
        {
            printf("    i = %d\n", i);
        }

        position++;
    }

    printf("\n");

    return 0;
}

您可以添加所需的输出吗?另外,
位置的值是多少?我正在测量输出的第一行是否没有缩进?这个程序应该打印某个字符?要在
C
中打印字符,您需要使用
%C
格式说明符,但在所示示例中我没有看到。如果不太大,请添加完整的代码也许在外循环的顶部添加一个打印会有所帮助,例如
printf(“循环顶部;i=%d\n”,i)
。您应该将
打印框(“i=%d\n”,i)(没有缩进)在第二个循环之前,你建议我做什么来修复它?@AlexaN我不知道这个循环的目的是什么,所以我不能回答这个问题。看起来像是一个人工的教科书示例,而不是真实的代码。这可能是因为它删除了关于真实程序的所有内容,以找到循环失败的原因,别担心,我会修复它。我忘记了do-while循环,谢谢您的帮助!很抱歉,我在编写所需输出时出错。
#include <stdio.h>

int main(void) 
{
    int position = 0;
    int size = 4;

    for (int i = 0; i < size; i++)
    {
        printf("i = %d\n", i);

        for (int j = 0; j < position; j++)
        {
            printf("    i = %d\n", i);
        }

        position++;
    }

    printf("\n");

    return 0;
}
i = 0
i = 1
    i = 1
i = 2
    i = 2
    i = 2
i = 3
    i = 3
    i = 3
    i = 3