Обновление нескольких членов структуры без массивов - PullRequest
0 голосов
/ 18 ноября 2018

Я работаю над программой со следующим описанием:

Напишите правильную программу на C, которая использует функцию для приема пользовательских данных и обновления членов структуры. Структура должна содержать три члена: Фамилия, Пол и Возраст. Фамилия не должна превышать 30 символов. Программа и функция должны быть достаточно гибкими, чтобы с любым количеством членов структуры.

Экземпляры структуры должны быть созданы в основной функции. Функция должна вызываться для каждого экземпляра для заполнения членов экземпляра. Назначенные значения элементов должны отображаться в основной функции.

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

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

Я не могу использовать массивы, поэтому я выбрал следующий параметр кода. Есть ли более эффективный способ сделать это?

#include <stdio.h>
#include<string.h>

struct member {
    char lastName[30];
    char gender;
    int age;
};

void populateStruct(struct member person);

// begin main function
int main(void){

    int i=0;
    struct member person1={0};
    struct member person2={0};

    populateStruct(person1);
    populateStruct(person2);

    return 0;
} // end main


// function prototypes
void populateStruct(struct member person){

    printf("\nEnter last name: ");
    scanf(" %s", &person.lastName); 
    printf("\nEnter gender: ");
    scanf(" %c", &person.gender);
    printf("\nEnter age: ");
    scanf(" %d", &person.age);

    printf("The information you entered is:\n"); 
    printf("\n"); 
    printf(" %s ", person.lastName);
    printf(" %c ", person.gender);
    printf(" %d ", person.age);
    printf("\n");

}

1 Ответ

0 голосов
/ 18 ноября 2018

Не печатается в функции main как состояние требований.Однако прежде чем вы сможете это сделать, вам нужно передать функцию указатель в вашу структуру.Прямо сейчас вы передаете копию вашей структуры в функцию, поэтому изменения, которые вы делаете в функции, не видны в main.

При передаче указателя вызывающая функцияможет разыменовать этот указатель для изменения объекта в main.

void populateStruct(struct member *person);

int main(void){

    int i=0;
    struct member person1={0};
    struct member person2={0};

    populateStruct(&person1);
    populateStruct(&person2);

    printf("The information you entered is:\n"); 
    printf("\n"); 
    printf(" %s ", person1.lastName);
    printf(" %c ", person1.gender);
    printf(" %d ", person1.age);
    printf("\n");
    printf("\n"); 
    printf(" %s ", person2.lastName);
    printf(" %c ", person2.gender);
    printf(" %d ", person2.age);
    printf("\n");


    return 0;
} // end main


// function prototypes
void populateStruct(struct member *person){

    printf("\nEnter last name: ");
    scanf(" %29s", person->lastName); 
    printf("\nEnter gender: ");
    scanf(" %c", &person->gender);
    printf("\nEnter age: ");
    scanf(" %d", &person->age);

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