代码不知道哪里出错了

img


#include
    int main(void)
    {  
      /*********Begin*********/
      int n,s,i,l;
      for(n=2;n<=1000;n++)
      {
      s=1;
      for(i=2;i<=n-1;i++)
      {
          l=n%i;
          if(l==0)
          s=s+i;
      }
      }
      if(s=n)
      printf("%d\n",n);
      /*********End**********/ 
       return 0;
    }

s == n不是s=n

判断完一个数是否是完数之后,没有使用大括号将下面的输出语句包含起来,导致只有最后一个数的结果进行了输出

修改以后的代码

#include<stdio.h>
int main(void)
{  
    int n, s, i, l;
    for (n = 2; n <= 1000; n++)
    {
        s = 1;
        for (i = 2; i <= n - 1; i++)
        {
            l = n % i;
            if (l == 0)
                s = s + i;
        }
        if (s == n)
        {
            printf("%d\n", n);
        }
    }
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/746622
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:代码报错整理
  • 除此之外, 这篇博客: 代码分层设计中的 分析: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    如下是它的结构图

                                                 

    接下来我们从外到内进行分析:这是项目布局

                                                      

           这里面有两种打印方式,一种是stdout,一种是socket网络打印,而debug_manager.c就是用来管理它两的,是不是发现这样写很容易扩展呢,自己还可以添加一个localog.c(日志)。

    这与平常最大的不同是有debug_manager.c文件,我们对它进行分析分析。

    typedef struct DebugOpr {
    	char *name;                  /*打印类型 stdout、netprint*/
    	int isCanUse;             
    	int (*DebugInit)(void);      /* 调试模块的初始化函数 */
    	int (*DebugExit)(void);      /* 退出函数 */
    	int (*DebugPrint)(char *strData);  /* 输出函数 */
    	struct DebugOpr *ptNext;
    }T_DebugOpr, *PT_DebugOpr;

      stdout.c文件

    static int StdoutDebugPrint(char *strData)
    {
    	/* 直接把输出信息用printf打印出来 */
    	printf("%s", strData);
    	return strlen(strData);	
    }
    
    static T_DebugOpr g_tStdoutDbgOpr = {
    	.name       = "stdout",
    	.isCanUse   = 1,                 /* 1表示将使用它来输出调试信息 */
    	.DebugPrint = StdoutDebugPrint,  /* 打印函数 */
    };
    
    int StdoutInit(void)
    {
    	return RegisterDebugOpr(&g_tStdoutDbgOpr);
    }
    

     netprint.c文件

    static int NetDbgInit(void)
    {
    	/* socket初始化 */
    	int iRet;
    	
    	g_iSocketServer = socket(AF_INET, SOCK_DGRAM, 0);
    	if (-1 == g_iSocketServer)
    	{
    		printf("socket error!\n");
    		return -1;
    	}
    
    	g_tSocketServerAddr.sin_family      = AF_INET;
    	g_tSocketServerAddr.sin_port        = htons(SERVER_PORT);  /* host to net, short */
     	g_tSocketServerAddr.sin_addr.s_addr = INADDR_ANY;
    	memset(g_tSocketServerAddr.sin_zero, 0, 8);
    	
    	iRet = bind(g_iSocketServer, (const struct sockaddr *)&g_tSocketServerAddr, sizeof(struct sockaddr));
    	if (-1 == iRet)
    	{
    		printf("bind error!\n");
    		return -1;
    	}
    
    	g_pcNetPrintBuf = malloc(PRINT_BUF_SIZE);
    	if (NULL == g_pcNetPrintBuf)
    	{
    		close(g_iSocketServer);
    		return -1;
    	}
    
    
    	/* 创建netprint发送线程: 它用来发送打印信息给客户端 */
    	pthread_create(&g_tSendTreadID, NULL, NetDbgSendTreadFunction, NULL);			
    	
    	/* 创建netprint接收线否: 用来接收控制信息,比如修改打印级别,打开/关闭打印 */
    	pthread_create(&g_tRecvTreadID, NULL, NetDbgRecvTreadFunction, NULL);			
    
    	return 0;	
    }
    static int NetDbgExit(void)
    {
    	/* 关闭socket,... */
    	close(g_iSocketServer);
    	free(g_pcNetPrintBuf);
    	return 0;
    }
    static int NetDbgPrint(char *strData)
    {
    	/* 把数据放入环形缓冲区 */
    	int i;
    	
    	for (i = 0; i < strlen(strData); i++)
    	{
    		if (0 != PutData(strData[i]))
    			break;
    	}
    	
    	/* 如果已经有客户端连接了, 就把数据通过网络发送给客户端 */
    	/* 唤醒netprint的发送线程 */
    	pthread_mutex_lock(&g_tNetDbgSendMutex);
    	pthread_cond_signal(&g_tNetDbgSendConVar);
    	pthread_mutex_unlock(&g_tNetDbgSendMutex);
    
    	return i;
    	
    }
    static T_DebugOpr g_tNetDbgOpr = {
    	.name       = "netprint",
    	.isCanUse   = 1,
    	.DebugInit  = NetDbgInit,
    	.DebugExit  = NetDbgExit,
    	.DebugPrint = NetDbgPrint,
    };
    int NetPrintInit(void)
    {
    	return RegisterDebugOpr(&g_tNetDbgOpr);
    }

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^