请大家解答一下噢,是c语言的问题

这个为什么输出不显示

img

这段代码,是想输出数据区间的完数?修改如下,供参考:

#include <stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    int i, j, a, flg = 0;
    for (i = 2; i <= n; i++) {
        for (j = 2, a = 1; j < i; j++) {
            if (i % j == 0)
            {
                a = a + j;
            }
        }
        if (a == i){
            flg = 1;
            printf("a=%d\n", i);
        }
    }
    if (!flg)
        printf("No Found.");
    return 0;
}

你这个循环的层级也太乱了,先把大括号对准吧🧐
你这个两个循环中a不可能等于I,所以也不会有输出。改成a==j试试

如果对你有帮助,还请点个采纳!

我来分析一下你的代码:

if ( i % j == 0) { 
  a = a + j;
 }

意味着当i是j的整数倍的时候,执行a=a+j。所以当n=28时,每轮i循环满足条件的j分别有:{2},{3},{2,4},{5},{2,3,6},{7},{2,4,8},{3,9},{2,5,10},{11},{2,3,6,12},{13},{2,7,14},{3,5,15},{2,4,8,16},{17},{2,3,6,9,18},{19},{2,4,5,10,20},{3,7,21},{2,11,22},{23},{2,3,4,6,8,12,24},{5,25},{2,13,26},{3,9,27},{2,4,7,14,28}。每个值都会累加给a,最终的值我懒得算了,总之挺大的一个数。

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

当a==i时,才会在屏幕上输出"a=..."。当第一轮i循环进行到这里时,a=3,i=2;第二轮a=6,i=3;第三轮a=12,i=4;第四轮……我不想再列举下去了,总之a的值已经远大于i,不可能满足a==i的,自然也不会有输出。

如果没有a==i的情况就不会输出结果。你可以在a赋值之后分别打印i, j, a的值,然后对比一下你就知道哪里有问题了

改成a==j试试