【问题标题】:for loop only shows last iterationfor 循环只显示最后一次迭代
【发布时间】:2020-05-16 13:09:36
【问题描述】:

我创建了最简单的程序,但它只显示了循环的最后一次迭代。我以前从未遇到过这个问题,所以也许这就是为什么我看不出有什么问题。任何帮助将不胜感激

int main() {

int number = 0;

    for (int i = 0; i < 2; i++)
    {
        printf("enter number: ");
        scanf("%d", &number);
    }  
    printf("Displaying entered information:\n");
    for (int i = 0; i < 2; i++)
    {
        printf("number: %d\n", number);
    }
}

【问题讨论】:

  • 您存储的只有一个number。你可能想要一个你读到的int数组
  • 在第二次循环中,scanf("%d", &amp;number); 会覆盖您在第一次循环中获得的数字。 “使用它或失去它”适用于这样的价值观。在这种情况下,您没有使用它,所以您丢失了它。
  • 我真的不明白这段代码的目的
  • 你需要#include &lt;stdio.h&gt; 或遭受未定义行为的愤怒
  • @JohnColeman 是的,我知道。只是我不明白它的目的是什么。

标签: c loops for-loop


【解决方案1】:

只要输入和显示在同一个范围内...

int main() {

    int number = 0;

    for (int i = 0; i < 2; i++)
    {
        printf("enter number: ");
        scanf("%d", &number);
        printf("Displaying entered information:\n");
        printf("number: %d\n", number);
    }
}

【讨论】:

  • 当我看到你的用户名时,我想回复c6
  • 我通常用c3 回答;-)
  • d5 -- 但是“避免在 cmets 中长时间讨论”的唠叨会在整个游戏开始之前很久就弹出。
【解决方案2】:

您正在执行以下操作:

读取一个数字。
覆盖该号码。
显示最后一个数字(由值被覆盖)。

这确实让您认为只执行了最后一个循环,但事实并非如此。

你可以把所有东西都放在同一个循环中,你会发现一切都会好起来的:

int number = 0;

    for (int i = 0; i < 2; i++)
    {
        printf("enter number: ");
        scanf("%d", &number);
        printf("Displaying entered information:\n");
        printf("number: %d\n", number);
    }

【讨论】:

    【解决方案3】:

    如果你想将它作为一个数组并通过定义和一些更改,你可以使其动态:

    #define INPUT_SIZE 2
    
    int main() {
    
        int number[INPUT_SIZE];
    
        for (int i = 0; i < INPUT_SIZE; i++)
        {
            printf("enter number: ");
            scanf("%d", &number[i]);
        }
    
        printf("Displaying entered information:\n");
    
        for (int i = 0; i < INPUT_SIZE; i++)
        {
            printf("number: %d\n", number[i]);
        }
    }
    

    【讨论】: