【问题标题】:Why the nested 'for' loop is not working in the below program?为什么嵌套的“for”循环在下面的程序中不起作用?
【发布时间】:2014-08-18 05:02:07
【问题描述】:
#include<stdio.h>

#include<conio.h>

void main()
{
    int m,a,i,b;

    printf("Enter the number upto which the prime number is to be displayed:");
    scanf("%d",&m);

    for(a=1;a<=m;a++)
    {
        for(i=1;i<=a;i++)
        {
            if(a%i==0)
            {
                b++;
            }
        }
        if(b==2)
        {
            printf("\t%d",a);
        }
    }
    getch();
}

【问题讨论】:

  • 哪个部分不起作用?你期望什么,你得到了什么?你能详细说明一下吗?
  • 请任何人回答这个问题...
  • 考虑格式化您的代码?
  • @Bala chander:回答什么? “不工作”并不是对问题的有意义的描述。
  • 初始化变量 b 并将其放入第二个 for 循环(如果存在)。它在主循环中

标签: c


【解决方案1】:

在代码开头和循环内部初始化b

#include<stdio.h>

#include<conio.h>

void main() 
{
    int m,a,i,b=0; // initialize b

    printf("Enter the number upto which the prime number is to be displayed:");
    scanf("%d",&m);

    for(a=1;a<=m;a++) 
    {
        for(i=1;i<=a;i++)
        { 
            if(a%i==0) 
            {
                b++;
            }
        }
        if(b==2)
        { 
            printf("\t%d",a);
        }

        b=0; // re-initialize
    } 
    getch();
}

【讨论】:

  • 好的,在将 b 初始化为 0 后,如果我将输入数字设为 10,则意味着它应该打印最多 10 个素数,但它在输出屏幕中没有显示任何内容。
  • 但我可以获得以下程序的预期输出,我在其中使用了一个函数,并且在该函数中我使用了第二个 for 循环。#include #include 无效乐趣(int z); void main() { int m,a; clrscr(); printf("请输入要显示的质数的最大数:"); scanf("%d",&m); for(a=1;a
  • @Balachander 你是否重新初始化了变量b=0,因为chouaib 建议或仅在第一个for 循环之后初始化b 一次,如下所示:for(a=1;a
  • 我的问题是这两个程序的功能相似,但如果我在单独的函数中使用第二个 for 循环,则意味着我可以获得预期的输出,但在第一个程序中不行。为什么会这样?
  • @Balachander 您的问题是正确的。对您的问题的回答是,当您使用函数时,在这种情况下,变量 b 仅成为该函数的本地变量,并且每次调用该函数时都会被初始化,以便获得正确的输出。您自己在函数开始时将变量b 初始化为int i,b=0;
【解决方案2】:

在初始化b 之前,您先执行b++。未初始化(非静态)的局部变量具有不确定的值,在操作中使用它们会导致 undefined behavior

【讨论】:

  • 好的,在将 b 初始化为 0 后,如果我将输入数字设为 10,则意味着它应该打印最多 10 个素数,但它在输出屏幕中没有显示任何内容。
  • 但我可以获得以下程序的预期输出,我在其中使用了一个函数,并且在该函数中我使用了第二个 for 循环。 #include #include void fun(int z); void main() { int m,a; clrscr(); printf("请输入要显示的素数的最大数:"); scanf("%d",&m); for(a=1;a
  • 我的问题是这两个程序的功能相似,但如果我在单独的函数中使用第二个 for 循环,则意味着我可以获得预期的输出,但在第一个程序中不行。为什么会这样?
猜你喜欢
  • 2017-10-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多