user-0 提问: 新手求救，不晓得哪里错了。呜呜~~~

回复:
user: user-1
content: 问题解决~~~~

user: user-1
content: #include <stdio.h> #include <stdlib.h> //首先你在函数中返回了局部变量 //这段内存在函数结束有可能被释放掉，数据虽然读到了 //但是数据不一定是正确的 //然后 函数统计有误 //你通过指针这样判断 //是无法正确找到结束位置 void main() { 	int a[50]; 	int n; 	printf("请输入学生数目，且数目<=50\n"); 	scanf("%d",&n); 	if (n>50) 	{ 		printf("学生数目有误！大于50\n"); 		return ; 	} 	printf("请输入%d个学生的成绩\n", n);  	for(int i=0; i<n;i++) 	{ 		scanf("%d", &a[i]); 	} 	int inum1 = 0,inum2 = 0; 	double dAvg1 = 0.0,dAvg2 = 0.0; 	int dwSUM1 = 0; 	int dwSUM2 = 0; 	for (int i=0; i<n;i++) 	{ 		if (a[i]>= 60) //jige 		{ 			inum1++; 			dwSUM1 = dwSUM1 + a[i]; 		} 		else //bujige 		{ 			inum2++; 			dwSUM2 = dwSUM2 + a[i]; 		} 	} 	if (inum1 > 0) 	{ 		dAvg1 = dwSUM1/inum1; 	}  	if (inum2 > 0) 	{ 		dAvg2 = dwSUM2/inum2; 	} 	printf("及格人数：%d ,%d个人平均成绩：%.1f\n", inum1, inum1, dAvg1); 	printf("不及格人数：%d,%d个人平均成绩：%.1f\n",inum2, inum2,dAvg2);   	system("pause"); }

user: user-1
content: 你这个代码完全是错误的

user: user-2
content: 引用 10 楼 qq_16912257 的回复:[quote=引用 6 楼 xwuno1 的回复:] scanf_s("%d", &a[i], sizeof(int));  少了个 & 号 printf_s("Pass:%d,%.1f", flag1, sum1 / flag1, sizeof(int), sizeof(float));格式控制符数目和你需要输出的数目不匹配 printf_s("Fail:%d,%.1f", flag2, sum2 / flag2, sizeof(int), sizeof(float)); 那么，这个sum1/flag1的位数是多少啊，应该怎么表示？？不是sizeof（float）么？[/quote]  你前面的控制符是两个，但是你后面却输出四个数值，肯定有问题。 假定你:%d,%.1f对应的是 flag1, sum1 / flag1，则输出后面两个sizeof需要再添加两个%d， printf_s("Pass:%d,%.1f, %d, %d", flag1, sum1 / flag1, sizeof(int), sizeof(float));

user: user-1
content: #include <stdio.h> #include <stdlib.h> //还可以全局变量，或者new 堆  void init(int a[], int n) { 	printf("请输入%d个学生的成绩\n", n); 	for(int i=0; i<n;i++) 	{ 		scanf("%d", &a[i]); 	}  } void jige(int a[], int n) { 	int inum1 = 0; 	double dAvg1 = 0.0; 	int dwSUM1 = 0; 	for (int i=0; i<n;i++) 	{ 		if (a[i]>= 60) //jige 		{ 			inum1++; 			dwSUM1 = dwSUM1 + a[i]; 		} 	} 	if (inum1 > 0) 	{ 		dAvg1 = dwSUM1/inum1; 	} 	printf("及格人数：%d ,%d个人平均成绩：%.1f\n", inum1, inum1, dAvg1); } void bujige(int a[], int n) { 	int inum2 = 0; 	double dAvg2 = 0.0;	 	int dwSUM2 = 0; 	for (int i=0; i<n;i++) 	{ 		if (a[i]< 60) //jige 		{		 			inum2++; 			dwSUM2 = dwSUM2 + a[i]; 		} 	}  	if (inum2 > 0) 	{ 		dAvg2 = dwSUM2/inum2; 	} 	printf("不及格人数：%d,%d个人平均成绩：%.1f\n",inum2, inum2,dAvg2);  } void main() { 	int a[50]; 	int n; 	printf("请输入学生数目，且数目<=50\n"); 	scanf("%d",&n); 	if (n>50) 	{ 		printf("学生数目有误！大于50\n"); 		return ; 	} 	init(a,n); 	jige(a,n); 	bujige(a,n); 	system("pause"); }

user: user-0
content: 引用 15 楼 zhouxiaofeng1021 的回复:问题解决~~~~ 恩恩，这个我会的。不过老师让都在函数中实现。。我就在尝试不把输入写到main怎么实现。看来没有必要。谢谢啦

user: user-3
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-4
content: scanf_s("%d", &a[i], sizeof(int));  少了个 & 号

user: user-5
content: 路过

user: user-0

user: user-0
content: 在线等大神、、

user: user-0
content: 输入时好好地，然后输入完毕就显示 0x0F3BE541 (msvcr120d.dll) (Project2.exe 中)处有未经处理的异常:  0xC0000005:  写入位置 0xCCCCCCCC 时发生访问冲突。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。 恩恩，谢谢啦

user: user-0
content: 引用 6 楼 xwuno1 的回复:scanf_s("%d", &a[i], sizeof(int));  少了个 & 号 printf_s("Pass:%d,%.1f", flag1, sum1 / flag1, sizeof(int), sizeof(float));格式控制符数目和你需要输出的数目不匹配 printf_s("Fail:%d,%.1f", flag2, sum2 / flag2, sizeof(int), sizeof(float)); 那么，这个sum1/flag1的位数是多少啊，应该怎么表示？？不是sizeof（float）么？

user: user-0
content: 引用 1 楼 qq_16912257 的回复: 输入时好好地，然后输入完毕就显示 0x0F3BE541 (msvcr120d.dll) (Project2.exe 中)处有未经处理的异常:  0xC0000005:  写入位置 0xCCCCCCCC 时发生访问冲突。那么

user: user-1
content: 你debug调试一下，立马能找到错误

user: user-1
content: for (i = 0; i < x; i++)  {  scanf_s("%d", a[i], sizeof(int));  //错了  }

user: user-2
content: scanf_s("%d", &a[i], sizeof(int));  少了个 & 号 printf_s("Pass:%d,%.1f", flag1, sum1 / flag1, sizeof(int), sizeof(float));格式控制符数目和你需要输出的数目不匹配 printf_s("Fail:%d,%.1f", flag2, sum2 / flag2, sizeof(int), sizeof(float));