user-0 提问: 求2～1000之间所有的完数，要求每行输出5个

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 你用了三个if，第二个和第三个的if可以改成elseif试下。

user: user-3
content: /*-  * Copyright (C), 1999-2019, mymtom.  *                     _  *  ____  _   _ ____ _| |_ ___  ____   * |    \| | | |    (_   _) _ \|    \  * | | | | |_| | | | || || |_| | | | |  * |_|_|_|\__  |_|_|_| \__)___/|_|_|_|  *       (____/   *  * vi:set ts=4 sw=4:  */ /**  * @file    PerfectNumber.c  */  #include <stdio.h>  static  int isPerfectNumber(int number) {     int sum;     int factor;      sum = 1;     for (factor = 2; factor <= number / 2; factor++) {         if ((number % factor) == 0) {             sum += factor;         }     }      if (sum == number) {         return 1;     } else {         return 0;     } }  int main(void) {     int number;      for (number = 2; number <= 1000; number++) {         if (isPerfectNumber(number)) {             printf("%d\n", number);         }     }     return 0; }  /* output 6 28 496 */

user: user-4
content: /*测试下彩色功能2019年11月1日01:40:11*/ #include <stdio.h> void //初始化  init(void);  void  //输出全部完数  ws_puts(void); int //完数判断，如果返回1表示完成，返回0表示非完数 is_ws(int n); void //每n个换行  newline(int n);  int ws_count = 0; //统计完数量 int n; //待输入的数  int main(int argc, char *argv[]) { 	init(); 	ws_puts(); 	return 0; }  /* 初始化输入  */  void init(void) { 	fprintf(stdout, "%s", "Enter the number: "); 	fscanf(stdin, "%d", &n); }  /* 输出全部的完数  */ void ws_puts(void) { 	int i;   	for (i = 1; i <=n ; ++i) { 		if (is_ws(i)) { 			newline(5); //每输出5个就换行  			printf("%d\t", i); 		} 	}  }  /* 完数判断，如果返回1表示完成，返回0表示非完数 */ int is_ws(int n) { 	int i; 	int sum = 0; 	for (i = 1; i < n; i++) { //除以1至其本身以外的数，如果能整除，就求和，最后与其本身相比较 		if (n % i == 0) 			sum += i; 	}  	if (sum == n) 		return 1; 	else 		return 0;  }  /* ws_count++,如果满n个，就打印换行 */ void newline(int n) { 	ws_count++; 	if (ws_count % n == 0) 		printf("\n");  }

user: user-4
content: #include <stdio.h> void //初始化  init(void);  void  //输出全部完数  ws_puts(void); int //完数判断，如果返回1表示完成，返回0表示非完数 is_ws(int n); void //每n个换行  newline(int n);  int ws_count = 0; //统计完数量 int n; //待输入的数  int main(int argc, char *argv[]) { 	init(); 	ws_puts(); 	return 0; }  /* 初始化输入  */  void init(void) { 	fprintf(stdout, "%s", "Enter the number: "); 	fscanf(stdin, "%d", &n); }  /* 输出全部的完数  */ void ws_puts(void) { 	int i;   	for (i = 1; i <=n ; ++i) { 		if (is_ws(i)) { 			newline(5); //每输出5个就换行  			printf("%d\t", i); 		} 	}  }  /* 完数判断，如果返回1表示完成，返回0表示非完数 */ int is_ws(int n) { 	int i; 	int sum = 0; 	for (i = 1; i < n; i++) { //除以1至其本身以外的数，如果能整除，就求和，最后与其本身相比较 		if (n % i == 0) 			sum += i; 	}  	if (sum == n) 		return 1; 	else 		return 0;  }  /* ws_count++,如果满n个，就打印换行 */ void newline(int n) { 	ws_count++; 	if (ws_count % n == 0) 		printf("\n");  }

user: user-5
content: ～～～for循环的执行语句为空

user: user-6
content: 每行输出5个，你的这个表述的方法不对你只判断了m小于5的情况如果说m比5大你又如何判断了，所以只要m是5的倍数就可以换行了 if(m % 5 == 0) {     printf("\n");  }

user: user-7
content: 在第一个循环中要加一句s=0

user: user-8
content: s=0应该在第一个for语句下，不应该在开头，每次都要清零的

user: user-0
content: 引用 15 楼 自信男孩的回复:你的s没有重新初始化为0. 有啊，一开头不是吗，s=0

user: user-9
content: 你的s没有重新初始化为0.

user: user-10
content: 引用 24 楼 weixin_45812797的回复:[quote=引用 21 楼 qq_42176102的回复:]第二个if语句有问题。他应该在上一个if语句里 那应该怎么改，说一下[/quote] 等我打完这把lol，跟你打出来

user: user-0
content: 引用 21 楼 qq_42176102的回复:第二个if语句有问题。他应该在上一个if语句里 那应该怎么改，说一下

user: user-11
content: 引用 22 楼 weixin_45812797 的回复:[quote=引用 20 楼 weixin_40290083的回复:]int main() { 	int m = 0; 	for (int i = 2; i <= 1000;i++) { 		int s = 0; 		for (int t = 1; t < i; t++) { 			if (i % t == 0) { 				s += t; 			} 		} 		if (s == i) { 			m++; 			printf("%d \t", i); 		} 		if (m % 5 == 0) { 			printf("\n"); 		} 	} 	 }   1、注意你的S每次在第一重循环中要重新赋值为0 2、判断是不是完数的语句块if(s == n)在要第二重循环之外，而在第一重循环之内。 按你的打出来只输出2[/quote]

user: user-0
content: 引用 20 楼 weixin_40290083的回复:int main() { 	int m = 0; 	for (int i = 2; i <= 1000;i++) { 		int s = 0; 		for (int t = 1; t < i; t++) { 			if (i % t == 0) { 				s += t; 			} 		} 		if (s == i) { 			m++; 			printf("%d \t", i); 		} 		if (m % 5 == 0) { 			printf("\n"); 		} 	} 	 }   1、注意你的S每次在第一重循环中要重新赋值为0 2、判断是不是完数的语句块if(s == n)在要第二重循环之外，而在第一重循环之内。 按你的打出来只输出2

user: user-10
content: 第二个if语句有问题。他应该在上一个if语句里

user: user-11
content: int main() { 	int m = 0; 	for (int i = 2; i <= 1000;i++) { 		int s = 0; 		for (int t = 1; t < i; t++) { 			if (i % t == 0) { 				s += t; 			} 		} 		if (s == i) { 			m++; 			printf("%d \t", i); 		} 		if (m % 5 == 0) { 			printf("\n"); 		} 	} 	 }   1、注意你的S每次在第一重循环中要重新赋值为0 2、判断是不是完数的语句块if(s == n)在要第二重循环之外，而在第一重循环之内。

user: user-0
content: 我初始化了，难道就对了吗

user: user-9
content: 引用 16 楼 weixin_45812797 的回复:[quote=引用 15 楼 自信男孩的回复:]你的s没有重新初始化为0. 有啊，一开头不是吗，s=0[/quote] 只需要初始化一次吗？如果这样，你的s是不是一直增加呢？

user: user-12
content: 按照格式贴出你的代码。