C语言2级考试

#include <stdio.h>

void fun( int m, int *k, int xx[] )
{
int i,j,n=0;
for(i=4;i<m;i++)
{
for(j=2;j<m;j++)

while(i>j)
{
if(i%j==0)
xx[n++]=i;
}
}
*k=n;
}
main()
{
int m, n, zz[100];
void NONO ( );
printf( "\nPlease enter an integer number between 10 and 100: " );
scanf( "%d", &n );
fun( n, &m, zz );
printf( "\n\nThere are %d non-prime numbers less than %d:", m, n );
for( n = 0; n < m; n++ )
printf( "\n %4d", zz[n] );
NONO();
}

void NONO()
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
int m, n, zz[100];
FILE *rf, *wf ;

rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
fscanf( rf, "%d", &n );
fun( n, &m, zz );
fprintf(wf, "%d\n%d\n", m, n );
for( n = 0; n < m; n++ )
fprintf(wf, "%d\n", zz[n] );
fclose(rf) ;
fclose(wf) ;
}

fun函数中一用while就出现unhandled exception in prog1.exe:0xC0000005:Access VIOLATION,快崩溃了,求高人帮忙

你错在while(i>j)!这个判断一旦成立将永远保持下去,因为循环体中没有使i或j变化的语句;所以无论xx数组有多大,很快就会越界而崩溃!逻辑上也是错的,有if(i%j==0)就可以了。不知为什么要用while……
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-11
去你本地书店买一本最新版的即可,一般考试的题目都差不多,不用担心。
这样可以么?追问

……求问我到底错哪了……