【问题标题】:Output of this code is not what I do expect. Where is the issue?这段代码的输出不是我所期望的。问题出在哪里?
【发布时间】:2017-04-08 23:30:24
【问题描述】:
#include<stdio.h>
#include<conio.h>
main()
{
    int i=1, j=1;
    while(i++<=100)
    {
        while(j++<=200)
        {
            if(j==150)
                break;
            else
                printf(“%d%d\n”, i, j);
         }

      } 
 }

在输出中,我看到外循环只是迭代了 2 次和 3 次,但仅此而已。我认为在外循环的每次迭代中,外循环应该迭代 100 次,内循环应该迭代 200 次。

但这并没有发生。有人可以指导我吗?

我正在使用 Dev C++ 并参加 C 语言课程。

【问题讨论】:

  • 你没有重置j = 0。一旦超过 200,将不会进入内部 while 循环,因此没有输出。
  • printf 放入有问题的循环中,看看会发生什么(作为一般规则)

标签: c loops nested


【解决方案1】:
#include<stdio.h>
#include<conio.h>
main()
{
    int i=1, j=1;
    while(i++<=100)
    {
        while(j++<=200)
        {
            if(j==150)
                break;
            else
                printf(“%d%d\n”, i, j);
         }
         //don't forget to reset your j counter on every iteration of the outer loop.
         j=1;
      } 
 }

【讨论】:

    【解决方案2】:

    您的代码中的问题是您没有在内部 while 循环结束时重置 j 计数器。因此,一旦j 超过 200,编译器将不会进入 while 循环,因为它永远不会重置为 1。在内部 while 循环结束后将 j 重置为 1:

    #include <stdio.h>
    #include <conio.h>
    
    int main(void)
    {
        int i = 1, j = 1;
        while(i++ <= 100)
        {
            while(j++ <= 200)
            {
                if (j == 150)
                    break;
                else
                    printf(“%d%d\n”, i, j);
             }
    
             // You need to reset j after your inner while loop finishes running.
             j = 1;
         } 
    }
    

    【讨论】:

    • 在外循环的下一次迭代中,j应该进入内循环,直到条件满足。不是?是什么阻止它进入内循环?当内循环在外循环的第三次迭代中到达 201 时,控制应该进入外循环,因为内循环条件在 201 处不满足。所以在外循环的下一次迭代,即 4 中,控制应该进入内循环因为它现在是 1 而不是 201。
    • 当循环从 while 条件而不是从 break 中退出时,它应该自动重置,在这种情况下,内部循环从 while 终止。那么当 j 已经重置时,什么是停止外循环进入内循环。
    • @JavaidAkhtar 它将第一次迭代直到 j 达到 150。然后在外循环的第二次增量时,它将变为 151,因此 while 循环将继续运行直到 200。现在,在你的代码,你不要重置j,所以只要j = 201,内循环将不会以外循环的任何增量运行。计数器j不会自动重置。
    • 另外,只是一些建议:What you should do if someone accepts your answer,因为您是 StackOverflow 的新手。您可以通过勾选旁边的勾号来接受答案。
    猜你喜欢
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    相关资源
    最近更新 更多