2015-04-01 5 views
1

Я новичок в C, и я пытаюсь инициализировать элементы массива во время выполнения, в соответствии с пользовательским вводом (поэтому, если пользователь вводит 4, тогда массив [0] = 4).Инициализировать элементы массива во время выполнения

У меня есть следующий код:

#include<stdio.h> 
#define MAX 10 
#define maxValue 100 

int array[MAX]; 
int n; 
int main(void){ 
    scanf("%d", n); //asks for array value 
    if (n <= maxValue) 
    { 
     array[0] = n; 
    } 
    return 0; 
} 

Код компилируется, но вызывает нарушение доступа. Что случилось?

+3

'Scanf ("% D", &n);' –

+2

Вы должны передать адрес п в 'зсапЕ()' –

+3

Пожалуйста, попробуйте найти флаги. которые позволяют использовать компилятор для предупреждения о таких проблемах. С GCC разумным вариантом является '-Wall', чтобы поймать большое количество таких ошибок. Другим компиляторам, вероятно, понадобятся другие варианты. –

ответ

2

Вы должны пройти & n для сканированияf.

scanf("%d", &n); 

Как указал Джонатан, это легко поймать предупреждение компилятора. Для GCC вы можете использовать -Wall, который покажет вам:

warning: format specifies type 'int *' but the argument has type 
    'int' [-Wformat] 
scanf("%d", n); //asks for array value 
     ~~ ^
+0

Я полностью забыл об адресе оператора! Такая ошибка noob. Code работает сейчас. Спасибо за вашу помощь. –

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