【问题标题】:variable in for loop has different values in the same loop (C language)for循环中的变量在同一个循环中具有不同的值(C语言)
【发布时间】:2020-03-05 03:23:01
【问题描述】:

在这些循环中,我有两个不同的值,我不知道为什么会这样,因为我没有增加它的大小。我在两个循环中都打印了 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 = 0
i = 1
    i = 1
i = 2
    i = 2
    i = 2
i = 3
    i = 3
    i = 3
    i = 3

【问题讨论】:

  • 你能edit 并添加你想要的输出吗?另外,position 的值是多少?
  • 我假设输出的第一行是 not 缩进的?
  • 这个程序应该打印某个字符? 要打印C 中的字符,您需要使用%c 格式说明符,但我在显示的例子。如果代码不是太大,请添加完整的代码
  • 也许在你的外循环的 top 上添加一个 print 会有所帮助,比如printf("Top of loop; i = %d\n", i);
  • 你应该把printf("i = %d\n", i);(没有缩进)放在第二个循环之前

标签: c loops for-loop printf


【解决方案1】:

要让循环中的代码至少执行一次,您可以使用 do-while-loop。我继续为你改变它。此外,在循环之前打印一个未缩进的 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");

编辑:啊,我明白了,你又改变了你想要的输出!这使得至少不再需要执行代码的条件。常规的 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");

【讨论】:

  • 我忘记了 do while 循环,感谢您的帮助!我在编写所需的输出时犯了一个错误,抱歉。
【解决方案2】:

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

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

【讨论】:

  • 你建议我做什么来解决它?
  • @AlexaN 我不知道这个循环的目的是什么,所以我无法回答。看起来像是一个人造的教科书示例,而不是真实的代码。
  • 这可能是因为它删除了有关真实程序的所有内容以查找循环失败的原因,别担心,我会修复它。
【解决方案3】:

只需将变量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;
}

程序输出是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2013-09-29
    相关资源
    最近更新 更多