Почему моя функция не работает с использованием структур в C? - PullRequest
0 голосов
/ 17 апреля 2020

Я создаю массив, который содержит местоположения сайтов в пространстве. Поэтому для array[2] я также хочу сказать array[2].num = 2 Я хочу, чтобы у каждого сайта был уникальный номер сайта num от 0 до N-1. Вывод различных значений i для array[i].num дает 0, 1, 32767. Принимая во внимание, что для увеличения i я хочу видеть увеличивающиеся значения от 0 до N-1.

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

 typedef struct site_t
{
    int num; // want to add more varaibels later hence type struct //
} site;
site fillStruct( site[], int);
int main()
{   int i;
    const int N = 20;
    site array[N];
    fillStruct(array, N);
    for (i = 0; i < N; i++) {
    printf("location of site %d\n", array[i].num);
}
}

site fillStruct(site array[], int size) {
    for (int k = 0; k < size; k++) {;
        array[k].num = k;   
        return array[k];
        } 

}

1 Ответ

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

Если я правильно понимаю ваш вопрос, я думаю, что ваша проблема связана с вашей fillStruct() функцией. L oop в этой функции будет выполняться только один раз, а не N раз. Вы никогда не превышаете k = 0, поэтому вы устанавливаете элемент num для array[0], а затем возвращаете array[0].

Когда вы возвращаетесь к своей основной функции, вы точно печатаете местоположение для array[0], но последующие номера сайтов в массиве являются просто случайными неинициализированными значениями.

Вместо этого вы хотите, чтобы оператор return находился за пределами блока l oop, поэтому функция должна выглядеть так: *

site fillStruct(site array[], int size) {
    int k; 

    for (k = 0; k < size; k++) {;
        array[k].num = k;
    }

    return array[k-1]; // Returns the last site in the array
}

Теперь, когда вы вернетесь к своему главному Функция у вас будет 20 сайтов с номерами от 0 до 19 (для N = 20).

Также обратите внимание, что в приведенном вами коде вы не используете возвращаемое значение fillStruct().

Надеюсь, это поможет, дайте мне знать, если я что-то пропустил.

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