Как я могу проверить, содержит ли структура какие-либо данные, когда я передаю их в цикле? - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь перебрать двухмерный массив структур, для которых уже есть динамически выделенная память, и определить любые структуры, которые не имеют данных, введенных пользователем. Другими словами, я прошу пользователя выбрать конкретные места в массиве для хранения своих данных, а затем я хочу просмотреть массив, распечатать все там и отобразить ПУСТО для мест, в которых данные не сохранены.

Как я могу определить, содержит ли структура данные, когда я передаю их в цикл?

typedef struct item {
    char name[20];
    int quantity;
} item;

struct item **shelves = (item **)malloc(num_rows * sizeof(item *));
for (i = 0; i < num_rows; i++) {
    shelves[i] = (item *)malloc(num_cols * sizeof(item));
}

for (int i = 0; i < num_rows; i++) {
    for (int j = 0; j < num_cols; j++) {
            ???     
    }               
}

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Добавьте флаг к вашей структуре item, и когда пользователь указывает данные для него, установите флаг. Вы можете использовать bool примерно так:

typedef struct item {
    char name[20];
    int quantity;
    bool used;
} item;

или вы также можете использовать битовое поле:

typedef struct item {
    char name[20];
    int quantity;
    unsigned char used:1; //bitfield
} item;

В любом случае, установите элемент used равным 1 (или true, если он bool), затем проверьте его при печати массива структур.

for (int i = 0; i < num_rows; i++) {
    for (int j = 0; j < num_cols; j++) {
            if(shelves[i][j].used){
                //printf statement for struct goes here
            }
            else{
                //printf statement for EMPTY goes here
            }
    }               
}
0 голосов
/ 12 сентября 2018

Добавить флаг для пометки используемых / пустых структур.

Начиная с C99, существует тип bool, использующий #include

...