Как получить ввод для массива от пользователя в C программировании? - PullRequest
0 голосов
/ 29 апреля 2020

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

Вот код

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n, i;
    int score [n];
    printf("Number of scores: ");
    scanf("%d", &n);
    for(i=0; i<n; i++){
       printf("score: ");
       scanf("%d", &score[i]);
    }
    return 0;
}

Неважно, какое значение я установил для n. Это всегда подсказывает пользователю 4 раза.

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Если вы используете массив с неизвестным размером во время компиляции, я бы предложил использовать распределение памяти. Таким образом, пользователь определяет размер массива при запуске программы.

#include  <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n, i;
    int *score;
    printf("Number of scores: ");
    scanf("%d", &n);

    score = (int *)malloc(sizeof(int)*n);

    for(i=0; i<n; i++){
       printf("score: ");
       scanf("%d", &score[i]);
    }
    free(score)
    return 0;
}

Функция malloc выделяет память размером n и возвращает указатель на выделенную память.

0 голосов
/ 29 апреля 2020

Как уже упоминалось в комментариях, вы должны изменить это:

/* bad */
int score [n];
printf("Number of scores: ");
scanf("%d", &n);

на это

/* good */
printf("Number of scores: ");
scanf("%d", &n);
int score [n];

Это так, как C выполняет код сверху вниз, как когда вы читаете книга. Он не будет «сдвигаться назад» на несколько строк выше и заполнять n, как только он будет введен пользователем. В точке, где вы объявляете int score [n], n должно быть уже известно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...