c, проблемы с использованием структуры

Я пытаюсь написать программу, которая читает текст из внешнего файла (string string int, на строку). Структура определена вне основной функции:

typedef struct Person {
  char fname[15];
  char lname[20];
  unsigned long int birth;
} clovek;

Мне не нужно, чтобы «clovek» был массивом, так как данные каждой строки могут быть перезаписаны. Строка красного цвета для буферизации:

fgets(buffer, 50, datafile);

Затем я хочу проанализировать его в структуре, но именно здесь возникает моя проблема:

int i = 0;
while (buffer[i] != ' ') {
  clovek.fname[i] = buffer[i];
  i++;
}

И это выдает мне ошибку: ожидаемый идентификатор или '(' перед токеном '.'

Я также хотел использовать этот код для отладки, но он также выдает другую ошибку:

printf("fname, %s\n", clovek.fname);

ошибка: ожидаемое выражение перед 'clovek'

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


person Community    schedule 01.05.2009    source источник
comment
Все ответы, кроме одного, которые вы получили, представляют собой еще один пугающий пример того, как люди могут ошибаться в очень простом синтаксисе C.   -  person    schedule 01.05.2009
comment
позвольте мне добавить еще одну проблему сложности, выравнивание элементов в структурах. Гугл твой друг.   -  person KevinDTimm    schedule 01.05.2009
comment
не говоря уже о ожидающем переполнения буфера и отсутствии завершения nul, что делает члены структуры Person бесполезными в качестве строк C.   -  person RBerteig    schedule 02.05.2009


Ответы (2)


clovek — это псевдоним для struct Person. Либо удалите ключевое слово typedef, либо создайте объект типа struct Person где-нибудь в своем коде. С данным кодом вы можете сделать:

clovek someone;

while (buffer[ i ] ) != ' ') {
    someone.fname[ i ] = buffer[ i ];
/* .. */
person dirkgently    schedule 01.05.2009

Ваше утверждение определяет clovek как псевдоним структуры Person.

Удалите «typedef» из объявления. Таким образом, clovek становится переменной типа Person:

Или, что еще лучше, отделите объявление структуры от объявления переменной:

struct Person {
  char fname[15];
  char lname[20];
  unsigned long int birth;
};

struct Person clovek;
person Cătălin Pitiș    schedule 01.05.2009
comment
Вероятно, вы имеете в виду struct Person clovek; во второй строке. - person millimoose; 01.05.2009
comment
Это должно быть struct Person clovek; - person Samir Talwar; 01.05.2009