ACM中Runtime Error有关问题!

ACM中Runtime Error问题!!
1095: 大内密探零零发的密码

--------------------------------------------------------------------------------

Description
东汉末年,群雄割据,益州疲弊。此诚危急存亡之秋也。

大内密探零零发临危受命,到曹营潜伏。 十数年卧薪尝胆,终于打听到曹营当前的士兵总数(num)。

为了让大唐朝了解曹营的军力状况(就是士兵总数num),同时不让曹营之人截获此信时发现其中的奥秘;

聪明的他想到一个好方法:

他把这个数据 num 写在一个由 0~9 组成的超长字符串 S 中;

把这个字符串中的 “8” 看成空格,就能分割出一个个数字(不可能全部都是8)。

其中 num 就是这些数字中的最大值( num<1,000,000,000)。

Input
输入包含多组测试数据。 输入第一行是一个整数T,表示共有T组测试数据(1<=T<=20);

接下来T行,每行为一个由 0~9 组成的字符串S(字符串S长度<=5000);

Output
对于每组测试数据,输出一行,输出用 “8” 分割得到的数字中的最大值。

Sample Input
3
100083215800
1234567890
200978086

Sample Output
3215
1234567
20097

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int Change(int a[],int n);
int main()
{
    char str[1001]={'\0'};
    int i,j,n,len,len1;
    while(scanf("%d",&len)!=EOF)
    {
        len1=0;
        while(len1<len){
        int num[1001]={0};
        n=0;
        getchar();
        gets(str);
        for(i=0;i<strlen(str);i++)
        {
            if(str[i]!='8')
            {
                num[n]=num[n]*10+(str[i]-'0');
            }
            else
                n++;
        }
        if(str[strlen(str)-1]!='8')
        {
            Change(num,n);
        }
        else
        {
            Change(num,n-1);
        }
        len1++;
    }
    }
    return 0;
}
int Change(int a[],int n)
{
    int i,temp=a[0];
    for(i=0;i<=n;i++)
    {
        if(a[i]>temp)
        {
            temp=a[i];
        }
    }
    printf("%d\n",temp);
    return 0;
}

我的代码输入测试值的时候,出现的是这样的情况,也不知道哪里错了
3
100083215800    --------    3215
1234567890        --------     234567
200978086           --------     97
为啥后面那两个值的前几个数没了?


------解决思路----------------------
引用:
Quote: 引用:

你这样的自己调试啊。肯定是越界的问题
。我不会调试。。怎么做来着?


你可以先去学习一下如何调试,再来解决就好了。去网上找c++调试技术吧。
调试比写代码更重要
------解决思路----------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

------解决思路----------------------
网上找得到,c语言刷新缓冲区