2016-06-16 7 views
-1

Я новичок в программировании, и я изучал C последние несколько месяцев.Создание массива в C

Я работаю над программой, которая хранит пары целых чисел в массиве. Программа предложит пользователю ввести количество пар для ввода, а затем мне нужно выделить хранилище для массива, а затем пользователь вводит пары по строкам, которые будут храниться в массиве. Программа должна получить доступ к этим парам для выполнения операций позже.

У меня возникли проблемы с попыткой установить это. Как я могу создать такой набор данных, в котором каждый элемент содержит пару целых чисел, не зная начального размера массива?

+1

Может быть полезно: http://www.programiz.com/c-programming/c-dynamic-memory-allocation. –

+1

«программа подсказывает пользователю ввести количество пар» и «без знания начального размера массива» противоречивы. Как только пользователь вводит количество пар, вы знаете размер массива, который нужно выделить. – kaylum

+0

Нет, это не так. Я должен инициализировать массив до того, как я попрошу пользователя. –

ответ

1

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

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

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

struct MyPair 
{ 
    int first; 
    int second; 
}; 

int main() 
{ 
    int nPairCount=0; 
    struct MyPair *pPairs = NULL; 

    // .... prompt from the user 
    // let's say we have a nPairCount>0 
    // We allocate a memory space in the heap that will be able to store 
    // nPairCount pairs contiguously. 
    pPairs = malloc(nPairCount*sizeof(struct MyPair)); 
    if(pPairs == NULL) 
    { 
     // LOG ERROR, THERE IS NOT ENOUGH MEMORY TO ALLOCATE YOUR PAIRS 
     return -1; 
    } 

    for(int i= 0; i<nPairCount; ++i) 
    { 
     // you can access the i-th pair in memory thanks to [] operator 
     // Fill the currentPair 
     // pPairs[i].first = ... ; 
     // pPairs[i].second= ... ; 

    } 

    // Do your process 

    // Do not forget to free your pairs from memory 
    free(pPairs); 

    return 0; 
} 
+0

Приведение результата malloc не требуется (или рекомендуется). –

+0

Спасибо за рекомендацию, этот актерский состав исходит из моих привычек C++. –

0

Я не думаю, что есть функция ведра, доступная в c. Но вы можете создать массив с количеством элементов, введенных пользователем.

#include<stdio.h> 
int main(){ 
int a,i; 
printf("Enter the number of pairs: "); 
scanf("%d",&a); 

double b[a*2];\\note that a is number of pairs, so 2a will make it elements 
printf("Enter the numbers: \n"); 
for(i=0;i<(2*a-1);i=i+2) 
{ 
    scanf("%lf %lf",&b[i],&b[i+1]); 
} 
printf("The pairs entered by you are:\n "); 
for(i=0;i<(2*a-1);i=i+2) 
{ 
    printf("%lf and %lf\n ",b[i],b[i+1]); 
} 


return 0; 
} 

Все, что я сделал это принять до 2 элементов в то время, и назначить им последовательные массивы, а затем распечатать их попарно.

Пример вывода: Введите число пар: 3

Введите цифры:

Пары введенные вами являются:

12.000000 и 14.000000

45,000000 и 456,000000

321,000000 и 568,000000

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