2016-12-21 2 views
-1

Рассмотрим код:Struct член переменной и структура в определении функции

#define STRINGMAX 50 

struct GIFTS { 
    char whofor[STRINGMAX]; 
    char city[STRINGMAX]; 
    float weight; 
    struct DIMENSIONS { 
     float width; 
     float length; 
     float height; 
    } dim; 
} gifts[STRINGMAX]; 

И функция определения:

void takeString(char * structvar, char structarr[], int arrpos) { 
    while (scanf("%[^\n]%*c]", structarr[arrpos].structvar) != EOF) { 
     scanf("%[^\n]%*c]", structarr[arrpos].structvar); 
    } 

} 

Это дает мне ошибку:

request for member ‘structvar’ in something not a structure or union

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

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

+0

'structarr' имеет тип' '* полукокса, вы имели в виду' structvar'? –

+0

Несвязанный с вашей проблемой, но для входа в считывание цикла требуется, чтобы пользователь вводил одни и те же данные * дважды *. –

+0

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

ответ

0

Что касается вашей проблемы (как я понимаю), это действительно невозможно. Предположим, что функция takeString принимает только один строковый аргумент и считывает ввод в эту строку.

Затем передайте правильную строку из массива и структуры в функцию. Это можно сделать с помощью еще одной функции, которая считывает указатель (или индекс) в структуру.

Возможно, что-то вроде этого псевдокода:

void takeString(char *string) 
{ 
    scanf("...", string); 
} 

void takeStructure(int arrayIndex) 
{ 
    ... 
    takeString(gifts[arrayIndex].city); 
    ... 
} 
+0

Это то, над чем я работаю! Таким образом, невозможно передать член (в этом примере выше члена 'city') в аргументах функции? –

+0

@angrysomoan Нет, это невозможно передать символ члена. –

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