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

108
15

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

Input: 3 4 5 6 7

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

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

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

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

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

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

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

Все вышеприведенные действительные ответы, вы также можете использовать динамически выделенный массив, если вы не знаете, сколько элементов есть. Там много разных версий, таких как увеличение размера массива на 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 5 лет, 8 месяцев назад
37

Вам нужно объявить размер массива раньше (рекомендуется с #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 5 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

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