数字显示不正确

Numbers aren't showing up right

你好! 我有点困惑,我真的尝试了我能想到的所有可能的解决方案。 但是该程序无法正常运行!该程序的目的是从一个数组中分离奇数和对数,并将它们中的每一个放在一个数组中! 当我执行并输入一些简单的数字后,每个数组中都会出现另一个随机的大数字! 为什么会这样,我该如何解决?

void Pairs_impairs(int* n,int T[], int P[], int Imp[]){
int i,j=0;
for (i=0;i<*n;i++){
    if(T[i]%2==0){
        P[j]=T[i];
        j++;}
    else{
        Imp[j]=T[i];
        j++;
}}
*n=j;
}
int main(){
int t[100],p[100],imp[100];
int n;
puts("saisir n :");
scanf("%d",&n);
puts("saisir le tableau : ");
int i;
for(i=0;i<n;i++){
    scanf("%d",&t[i]);
}
for(i=0;i<n;i++){
    printf("%d ",t[i]);
}
Pairs_impairs(&n,t,p,imp);
printf("\nLes pairs : ");
for(i=0;i<n;i++){
    printf("%d ",p[i]);
}
printf("\nLes impairs : ");
for(i=0;i<n;i++){
    printf("%d ",imp[i]);
}
return 0;

}

函数不正确。您需要在函数中为数组 P 和 Imp 保留单独的索引。例如

void Pairs_impairs(int* n,int T[], int P[], int Imp[]){
int i,j1=0, j2 = 0;
for (i=0;i<*n;i++){
    if(T[i]%2==0){
        P[j1]=T[i];
        j1++;}
    else{
        Imp[j2]=T[i];
        j2++;
}}
*n=j1;
}

另外,你应该保证数组 P 和 Imp 的元素数量相等。否则你需要return从函数两个索引。

例如

struct Pair
{
    size_t first;
    size_t second;
};

struct Pair Pairs_impairs( const int T[], size_t n, int P[], int Imp[] )
{
    struct Pair p = { .first = 0, .second = 0 };

    for ( size_t i = 0; i < n; i++ )
    {
        if ( T[i] % 2 == 0 )
        {
            P[first++] = T[i];
        }
        else
        {
            Imp[second++] = T[i];
        }
    }

    return p;
}