Кажется, вы хотите, чтобы пользователь мог ввести количество элементов в массиве. Ваш код сканирует эту информацию в переменную i
. Поэтому вы не можете использовать переменную i
в качестве счетчика в циклах for. Вам нужны две разные переменные. Одна переменная для хранения числа целых чисел, включаемых в сумму, а другая переменная для циклов.
Далее, чтобы получить массив переменного размера, вам нужно использовать пользовательский ввод при определении массива. Это называется VLA (массив переменной длины).
Что-то вроде:
#include <stdio.h>
int main() {
int i;
int N = 0; // New variable holding the number of integers in the sum
scanf("%d\n",&N); // scan into N
int a[N]; // Use N for the VLA
int sum=0;
for(i=0;i<N;i++) // Use N as limit
scanf("%d\n",&a[i]);
for(i=0;i<N;i++) // Use N as limit
sum=sum+a[i];
printf("%d\n",sum);
return 0;
}
Тем не менее - будьте осторожны с VLA. Если пользователь вводит большое число для N, может произойти переполнение стека. Если вы хотите использовать VLA, ваш код должен обеспечивать максимальный
ограничение на ввод данных пользователем.
Обычно лучше использовать динамическое распределение вместо VLA. Как:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
int N = 0;
scanf("%d\n",&N);
int *a = malloc(N * sizeof *a); // Dynamic allocation
if (a == NULL) exit(1); // Check for allocation failure
int sum=0;
for(i=0;i<N;i++)
scanf("%d\n",&a[i]);
for(i=0;i<N;i++)
sum=sum+a[i];
printf("%d\n",sum);
free(a); // Free allocated memory
return 0;
}
Некоторые дополнительные комментарии:
1) Для вычисления суммы вам на самом деле не нужен массив. Просто отсканируйте в int
и добавьте его в sum
. Нет необходимости сначала сохранять его в массиве.
2) Всегда проверяйте возвращаемое значение scanf
. Пример: if (scanf("%d\n",&N) != 1) exit(1);