Получение чисел из стандартного ввода в массив в C

Я пытаюсь получить числа из стандартного ввода в массив. первое число в stdin - это количество элементов в массиве (это может быть любое целое число). Я сделал это, чтобы получить первый номер:

while(c=getchar()!=' '){
n*=10;
n+=atoi(c);
}

А затем создал массив размером n. Теперь мне нужно пройти через все остальное

 while(c=getchar()!=EOF)

и добавить числа в массив. Числа разделяются \t, а иногда и \n. Как бы я это сделал? Я думал час и до сих пор не получил рабочий код. Любая помощь? Спасибо!

1 ответ

Решение

Если вы не чувствуете себя особенно мазохистски (или не можете из-за требований к домашней работе), вы обычно делаете это, используя scanf:

int n;
int *numbers;

scanf("%d", &n);

numbers = malloc(n * sizeof(*numbers));

for (int i=0; i<n; i++)
    scanf("%d", &numbers[i]);

Для более надежной обработки ошибок вы часто хотите прочитать строку за раз, используя fgets, а затем разобрать это на отдельные номера, используя sscanf (или что-то подобное).

Как в стороне: нет, вы не должны бросать возврат из malloc в int *, Это не нужно и не желательно в C. Просто #include <stdlib.h>и присвойте результат, как показано выше. Если ваш компилятор выдает предупреждение (или ошибку) о преобразовании, это означает, что происходит одно из двух: либо вы забыли #include <stdlib.h> как требуется, иначе вы на самом деле компилируете как C++. Если вы пишете C++, напишите настоящий C++, что означает, что вы не должны использовать malloc совсем.

Другие вопросы по тегам