有关具有scanf函数的数组的问题

时间:2018-01-05 14:18:23

标签: c scanf

我遇到了scanf功能问题。如果我用[i]代替+ i,它可以工作,但我不明白为什么。

printf("Inserire i %d numeri:\n", N);
for(i = 0; i < N; i++){
    scanf("%d", a[i]);
    scanf("%*c");
}
for(i = 0; i < N; i++)
    sum += a[i];

printf("%d\n", sum);

4 个答案:

答案 0 :(得分:2)

假设

int a[42];

scanf("%d", ...)需要a[i]的{​​{1}} 地址a + i&a[i]相同。

a[i]反过来相当于*(a + i)*&a[i]。)

需要地址,因为scanf()需要知道 将扫描数据写入的位置。

看到这个

for(i = 0; i < N; i++)
  sum += a[i];

您确定sum设置为0,在进入上面的循环之前,不是吗?

答案 1 :(得分:2)

Scanf期望一个地址(指向[i]的指针)将值存储在其中。 a [i]表示地址a + i的值。

这就是为什么你必须使用&amp; a [i]或a + i而不是[i]。

答案 2 :(得分:1)

它们是不同的东西(并且编译器可能会警告你):a+i是指向数组偏移i处元素的指针,这是scanf所需要的知道将值读入的位置,而a[i]是该地址的,这对scanf毫无用处。

答案 3 :(得分:-1)

Antonio Pavan。这是一个很好的问题。确保您已将数组声明为a[MAX_ARRAY]或其他内容。也许您的一个错误是您通过这种方式a[] = NULL;a[] = {};声明了数组。首先,这不起作用,因为没有值被覆盖。是的,你没有在scanf( "%d", &a[ i ] );上给出变量地址。您应该使用scanf()这样的scanf( "%d", &a[ i ] );函数。给定的&amp;显示变量或数组的地址。您可以使用此程序来解决您的问题...

#include <stdio.h>
#define MAX_ARRAY 99

int main( void );    //Not taking any passed parameters...

int main() {
    int *arr[ MAX_ARRAY ];
    int i,
    sum = 0;
    printf( "Enter 10 words to make their summation:- " );
    for( i = 0; i < 10; i++ ) {
        scanf( "%d", &arr[ i ] );
        sum += arr[ i ];
        //Or mostly sum += *( arr + i );
    }

    printf( "The given numbers sumation is:- %d", sum );

    return ( 0 );
}