2014-01-28 2 views
0

Я пытаюсь написать простую программу, которая будет запрашивать пользователя ввести N чисел, хранить их в массиве, а затем просто суммировать их всеСканирование и сумма с использованием массива в C

Я понимаю, что я могу просто сделать это с помощью рекурсии, но я пытаюсь узнать, как работает массив

Пример:

1 (нажмите клавишу ВВОД) 2 (хит ввод) ... 10 (нажмите ввод)

Ожидаемые результаты: 55

#include <stdio.h> 

int main (void){ 
    int n; 
    int a[n]; 
    int counter; 

    printf("How many numbers do you want to enter? \n"); 
    scanf("%d", &n); 

    printf("OK! now enter your number: \n"); 
    for (int i = 0; i <= n; i++){ 
    scanf("%d", &a[i]); 
    counter =+ a[i]; 
    } 

    printf("The answer is: %d\n", counter); 
    return 0; 
} 

Прямо сейчас нет сообщения об ошибке, не выход, только сообщение об ошибке стандартные окна «scanner.exe перестал работать ...»

Я использую Win8 и Компилятор GCC

+0

ответы, и '' я <= n' --> я ' + =' – BLUEPIXY

+0

Пожалуйста, конденсируются и улучшить отступы от вашего кода. – Richard

ответ

2

Вы используете массивы переменной длины. Во время выполнения должно быть известно значение n. Поместите объявление

int a[n]; 

после приема входа для n, то есть, после того, как scanf("%d", &n); и инициализировать counter до нуля, прежде чем использовать его в противном случае вы получите значение мусора (из-за неопределенное поведение).
Также измените условие петли for от i <= n до i < n.

+0

Как будет известно во время компиляции, если n зависит от ввода пользователя? – ApproachingDarknessFish

+0

@ValekHalfHeart; Это была опечатка. – haccks

+0

Это не имеет большого значения; первый printf должен запускаться до запуска этой ошибки. – Ian

0

После этой линии:

int n; 

Как вы думаете, значение n это?

Теперь переходим к следующей строке:

int a[n]; 

Насколько велик этот массив?
Можете ли вы получить к нему доступ должным образом?

3

Прежде всего, вы не можете создать статический массив, не зная его размер. Сначала вам нужно спросить пользователя о переменной «n», а затем объявить массив.

Вам также необходимо явно инициализировать переменную счетчика равным нулю перед началом подсчета. В C переменные по умолчанию не равны 0 при их объявлении.

Оператор «= +» не существует AKAIK, измените его на «+ =».

Последнее, но не менее важное: предел в ваших циклах немного невелик, вы просите 11 значений;) (Я отредактировал это сообщение, я был не прав, только прося 9 значений. рода вещи)

#include <stdio.h> 

int main (void){ 
    int n; 
    int counter = 0; 

    printf("How many numbers do you want to enter? \n"); 
    scanf("%d", &n); 

    int a[n]; 

    printf("OK! now enter your number: \n"); 
    for (int i = 0; i < n; i++){ 
    scanf("%d", &a[i]); 
    counter += a[i]; 
    } 

    printf("The answer is: %d\n", counter); 
    return 0; 
} 
+0

@abelenky да, но я думаю, что OP хочет накапливать значение, а не присваивать каждому элементу массив без суммы. – ArthurChamz

+0

Ничего себе только что заметил, спасибо – user3109599

+1

@abelenky Тем не менее, он действителен синтаксисом Си. Спасибо, что указали, что out =) – ArthurChamz

Смежные вопросы