C: Массив сканирования с помощью целых чисел

119
16

Как сканировать значения массива? Подобно:

Input: 3 4 5 6 7

What I want:- ar[5] = {3, 4, 5, 6, 7};

Это звучит просто, но я застрял там. Может ли кто-нибудь помочь?

спросил(а) 2014-06-15T22:11:00+04:00 6 лет, 1 месяц назад
1
Решение
97

Вы можете прочитать его, когда вы читаете пять целых чисел один за другим:

for (i = 0; i < 5; i++)
scanf("%d", &array[i]);

Таким образом, вы можете ввести 3 4 5 6 7 нормально.

ответил(а) 2014-06-15T22:23:00+04:00 6 лет, 1 месяц назад
55

Все вышеприведенные действительные ответы, вы также можете использовать динамически выделенный массив, если вы не знаете, сколько элементов есть. Там много разных версий, таких как увеличение размера массива на 1 с каждым новым элементом или ввод размера в начале...

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

int main(){
int *ar, i, j, h;

scanf("%d", &i); // Input the size of an array

ar = (int*)malloc(sizeof(int)*i); // allocate the memory for your array

for(j = 0; j < i; j++){
scanf("%d", &h);
*(ar+j) = h;
}

for(j = 0; j < i; j++) printf("%d\n", ar[j]);

free(ar);
return 0;
}

И вот пример, где вы увеличиваете размер на 1 с каждым новым элементом, используя realloc(); , В этом примере можно сказать, что вы вводите номера до ввода -1.

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

int main(){
int *ar, i, s = 1;

ar = (int*)malloc(sizeof(int));

do{
scanf("%d", &i);
if(i == -1) break;

ar[s-1] = i;
realloc(ar, ++s);
}while(1);

for(i = 0; i < s - 1; i++) printf("%d\n", ar[i]);

free(ar);

return 0;
}

Очень важная вещь с динамически распределенными массивами заключается в том, что вам нужно освободить память, используя free(); перед выходом из программы.

ответил(а) 2014-06-15T22:39:00+04:00 6 лет, 1 месяц назад
40

Вам нужно объявить размер массива раньше (рекомендуется с #define), что означает, что вам нужно знать размер ввода раньше.

#define LEN 5
void main()
{
int arr[LEN];
for (i =0; i < LEN; i++)
scanf("%d", &arr[i]);
}

Если вы хотите динамически выделять массив, вы должны использовать указатели (с malloc и realloc).

void main()
{
int* arr = (int*) malloc(0);
int size = 0;
int val;
for (size = 0; scanf("%d", &val) != EOF; size++)
{
arr = (int*) realloc(arr, size + 1);
arr[size] = val;
}
free(arr);
}

ответил(а) 2014-06-15T22:19:00+04:00 6 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема