我无法在数组中存储整数

时间:2014-11-28 13:01:55

标签: c arrays

这是我的导师给出的一项活动。

创建一个接受用户数字输入的程序。如果用户输入偶数,请将其存储到数组中以获得偶数。如果用户输入奇数,则将其存储到另一个奇数的数组中。如果用户已输入10个数字,则输入终止。显示每个数组及其元素的大小。

示例:

输入:5, 6, 12, 10, 0, 3, 4, 100, -1, 7

偶数(6): 6 12 10 0 4 100

奇数(4): 5 3 -1 7

这是我提出的代码。

#include <stdio.h>

int sort(int);

int main(){
    int input, count;

    for(count=0;count!=10;count++){
        printf("Enter 10 digits: ");
        scanf("%d", &input);
        sort(input);
        }

    printf("%d", input);

    return 0;
    }

int sort(int inp){
    int odd[10];
    int even[10];

    if(inp%2==0){
        odd[]=inp;
        }

    else
        even[]=inp;

    return 0;
    }

请帮我解释如何将数字存储到两个单独的数组中。任何提示将不胜感激。

9 个答案:

答案 0 :(得分:0)

除了Sourav的评论表明你不应该int[]数组是sort的本地数组之外,这种语法对于在C中分配数组是不正确的:

odd[]=inp;

在我的编译器上,它会生成以下错误:

24:9: error: expected expression
    odd[]=inp;

要存储到odd,您需要指明您要存储的索引,例如:

odd[1]=inp;

这也意味着你需要跟踪你为每个阵列写的最新索引!

答案 1 :(得分:0)

您需要告诉编译器您要存储数据的数组的索引。在sort

if(inp%2==0){
    odd[]=inp;
}

else
    even[]=inp;

return 0;
}

应该看起来像:

if(inp%2==0){
    odd[endofoddindex]=inp;
    }

else
    even[endofevenindex]=inp;

return 0;
}

也就是说,你不会在数组中使用局部变量,因为它们在每次调用时都会被释放。最好的办法是在main中声明数组并将其传入。

答案 2 :(得分:0)

您需要将数组作为全局变量或将它们传递给sort函数。它们目前在哪里,每次调用sort函数时都会重新创建它们,并且程序的其余部分无法访问它们。 您还需要跟踪每个阵列中的最大整数数和当前数。

您的排序测试将是这样的:

if( inp % 2 == 0)
{
   //TODO check that currentEvenCount < maxEvenCount
   even[ currentEvenCount ] = inp;
   currentEvenCount++
}
else
{
   //TODO check that currentOddCount < maxOddCount
   odd[ currentOddCount ] = inp;
   currentOddCount++;
}

要将数组声明为全局变量,只需将声明移到上面引用的任何函数之外

int even[10];
int odd[10];

int main() ...

要将它们作为参数传递给sort函数,您可以声明如下排序:

sort( int inp, int even[], int maxEvenCount, int* currentEvenCount, int odd[]. int maxOddCount, int* currentOddCount)
{
    ...
    if( inp % 2 == 0)
    {
      //TODO check that currentEvenCount < maxEvenCount
      even[ *currentEvenCount ] = inp;
      (*currentEvenCount)++
    }

}

currentEventCount前面的*取消引用指针并获取/设置指向的实际值。

然后你会这样调用sort:

int main()
{
   int evenArray[10];
   int oddArray[10];

  int currentEvenCount = 0;
  int currentOddCount = 0;


   ...
   sort( input, evenArray, 10, &currentEvenCount, oddArray, 10, &currentOddCount);
}    

答案 3 :(得分:0)

希望这个程序能解决你的问题。这是工作代码。

#include <stdio.h>

int sort(int[]);

int main(){
    int input[10], count;

    printf("Enter 10 digits: ");

    for(count=0;count<10;count++){
        scanf("%d", &input[count]);
    }
    sort(input);
    return 0;
}

int sort(int inp[]){
    int odd[10];
    int even[10];
    int oddCount=0, evenCount=0;
    int i;
    for(i=0; i<10;i++)
    {
        if(inp[i]%2==0){
           even[evenCount]=inp[i];
           evenCount++;
        }
        else
        {
           odd[oddCount]=inp[i];
           oddCount++;
         }
     }
     printf("ODD COUNT is %d \n", oddCount);
     for(i=0; i<oddCount;i++)
     {
         printf("ODD VALUE %d \n", odd[i]);
     }
     printf("EVEN COUNT is %d \n", evenCount);
     for(i=0; i<evenCount;i++)
     {
         printf("EVEN VALUE %d \n", even[i]);
     }
     return 0;
 }

答案 4 :(得分:0)

将数组定义为函数排序的局部变量没有任何意义,因为每次调用函数时,都会重新创建数组。

该程序可以采用以下方式

#include <stdio.h>

#define N 10

enum Type { Even, Odd };

enum Type sort( int x )
{
    return x % 2 == 0 ? Even : Odd;
}

int main( void )
{
    int odd[N];
    int even[N];
    int odd_count = 0;
    int even_count = 0;

    int i;

    printf( "Enter %d numbers: ", N );

    for( i = 0; i < N; i++ )
    {
        int num;
        scanf( "%d", &num );

        switch ( sort( num ) )
        {
        case Even:
            even[even_count++] = num;
            break;
        case Odd:
            odd[odd_count++] = num;
            break;
        }
    }

    printf( "Even numbers (%d):", even_count );
    for ( i = 0; i < even_count; i++ ) printf( " %d", even[i] );
    printf( "\n" );

    printf( "Odd numbers (%d):", odd_count );
    for ( i = 0; i < odd_count; i++ ) printf( " %d", odd[i] );
    printf( "\n" );


    return 0;
}

如果要输入

5  6 12 10 0 3 4 100 -1 7

然后输出

Even numbers (6): 6 12 10 0 4 100
Odd numbers (4): 5 3 -1 7

只需复制,粘贴和调查该程序。:)

答案 5 :(得分:0)

您的evenodd阵列都是本地的。这意味着只要函数存在它们就存在。因此,您无法检索已存储的数据(您也无法正确存储)。

所以你需要main中的两个数组以及另外两个变量来用作下面程序中数组(ij)的索引。修改后的程序如下:

#include <stdio.h>

int sort(int);

int main(){
    int input, count,i=0,j=0; //i and j to be used as array indices
    int odd[10];
    int even[10]; //arrays in main

    for(count=0;count!=10;count++){
        printf("Enter 10 digits: ");
        scanf("%d", &input);
        if(sort(input)) //if odd number was found
            odd[i++]=input;
        else //even number found
            even[j++]=input;
        }

    printf("%d", input);
    //print even and odd arrays here
    return 0;
    }

int sort(int inp){
    if(inp%2==0)
        return 0; //if number is even,return 0

    return 1; //else return 1
    }

答案 6 :(得分:0)

检查以下代码。它是自我解释的。

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

#define NUM 10

int main()
{
    int input, i;
    int oddcounter = 0, evencounter =0;
    int oddarr[NUM];
    int evenarr[NUM];

    printf("Enter 10 integers\n");  

    for (i = 0; i < NUM; i++)
    {
        if ( scanf("%d", &input) == 1 )
        {
            if ((input % 2) == 0)
            {
                evenarr[evencounter++]  = input;
            }
            else
            {
                oddarr[oddcounter++] = input;
            }
        }

    }
    printf("Number of elem in oddarray : %d, evenarray : %d\n\n", oddcounter, evencounter);

    printf("Odd elements are :");
    for (i = 0; i < oddcounter ; i++) printf("%d\t", oddarr[i]);
    printf("\n");

    printf("Even elements are :");
    for (i = 0; i < evencounter; i++) printf("%d\t", evenarr[i]);
    printf("\n");

    return 0;
}

答案 7 :(得分:-2)

您的变量input只是int,它不是数组。你需要两个数组:

int even[10], odd[10];

然后,您需要跟踪目前已读过的数字的数量,并且每个数字都要检查存储它的数组。

我没有看到需要进行排序,所以不确定为什么你有一个名为sort()的函数。

应该是这样的:

int even[10], odd[10];
int oddindex = 0, evenindex = 0;
while(scanf(" %d", &x) == 1)
{
  if(x % 2 == 0)
    even[evenindex++] = x;
  else
    odd[oddindex++] = x;
  if((evenindex + oddindex) >= 10)
    break;
}
/* Loop here to print numbers. */

答案 8 :(得分:-2)

适合作业问题的答案:

int main()
{
    int i,c,o[10],e[10];int oc=0;int ec=0;int*pc;for(c=0;c<10;c++){scanf("%d",&i);pc=(i&1)?&o[oc++]:&e[ec++];*pc=i;}
    // Now print out the values as requested in oc, o, ec and e.
}