我遇到了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);
答案 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 );
}