C中的数组问题

时间:2014-10-16 05:01:38

标签: c arrays

我正在尝试允许用户输入最多10个数字,我的代码在没有数组的情况下工作但第二个我尝试合并我的数组我收到错误消息

“错误:无效操作数到二进制/(有'int *'和'int') :27:7:警告:指针和整数之间的比较 .c:34:13:警告:指针和整数之间的比较 .c:37:12:错误:无效操作数到二进制/(有'int *'和'int') .c:39:10:警告:指针和整数之间的比较

我已经在每一行上声明了数组并且它仍然是一个问题。我是否需要更改变量类型并确保它们一致。我很困惑..

#include <stdio.h>


int main()
{
    sum_divisors();
}


int sum_divisors ()
{
#define SIZE 10
    int i, t; /* the j variable will be your a/i in the loop below */
    long sum = 1;


    int j;
    int a [SIZE];
    printf("Enter in a number \n");
    scanf("%d", &a);

    sum = 1;
    i=2;
    j=a/i;

    if (a < 2){

        return 0;

    }
    while (i < j) /* loop until i is greater than or equal to sqrt(a), meaning i >= a/i */
    {
        if (i*j == a) /* Here's the divisibility test. If i*j == a, then they are both divisors */
            sum += i+j; /* add both to the sum */
        i = i+1; /* Advance to the next i value */
        j = a/i; /* and find the corresponding j value */
    }
    if (i*i == a) /* test for a perfect square here */
        sum += i;
    printf(" The Sum of the number is" " %ld", sum);
}

4 个答案:

答案 0 :(得分:2)

如果您有数组 a,则将其各个元素称为a[x],其中x是数组索引。

所以,要阅读第四个元素,你会使用类似的东西:

scanf ("%d", &(a[3])); // should really check return code here as well.

在您的代码中,您不断引用a,它通常会衰减到数组a的第一个元素的地址,而不是您如果你想要实际的元素本身就应该这样做。

它会衰减到导致指针/整数冲突的地址。

答案 1 :(得分:0)

数组int a[SIZE]的元素将以a[i]*(a+i)作为索引进行访问,而不仅仅是ia指向数组的基址。

答案 2 :(得分:0)

scanf("%d", &a);a是数组名称,它是一个常量整数指针。使用此行,您将尝试修改常量变量。这就是它显示上述错误的原因。

使用以下代码

将输入转换为数组
for(i=0;i<SIZE;i++)
    scanf("%d",&a[i]); //a[i] will represent the i+1 the element in the array

答案 3 :(得分:0)

试试这个....

#include <stdio.h>
int main()
{
sum_divisors();
}


int sum_divisors ()
{
    #define SIZE 10
int i, t; /* the j variable will be your a/i in the loop below */
long sum = 1;
int j,div;
int a [SIZE];
printf("Enter 10 number \n");

     for(i=0;i<10;i++)
     {
        printf("a[%d]=>",i);
        scanf("%d",&a[i]);
     }
    for(i=0;i<10;i++)
    {
    div=a[i]/2;
    sum=1;

            if(a[i]<2)
            sum=0;
            else
            {
            for(j=2;j<=div;j++)
            if((a[i]%j)==0)
            sum+=j;
            }
    printf(" The Sum of divisor of %d is %ld\n", a[i],sum);
    }

 }