Структурные проблемы в Си - PullRequest
       3

Структурные проблемы в Си

0 голосов
/ 01 декабря 2011

Задача: Создать базу данных работников.Программа также должна раскрывать информацию о работнике по имени и рассчитывать среднюю зарплату всех работников.Когда я пытаюсь скомпилировать этот код

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

struct worker {
    char name[10];
    int salary;
};
int main (void);
    struct worker p1 = {"koko", 3400};
    printf ("name=%s,salary=%d,p1,name,p1,salary");
    return(0);
}

, я получаю

./dz2.c:11:9: error: expected declaration specifiers or «...» before string constant
./dz2.c:12:1: error: expected identifier or «(» before «return»
./dz2.c:13:1: error: expected identifier or «(» before «}» token

Я был бы благодарен за решение этой проблемы.

Ответы [ 6 ]

2 голосов
/ 01 декабря 2011

Вы делаете много вещей неправильно.

Поскольку это домашняя работа, и вы должны чему-то научиться, попробуйте следующие вещи:

  • Начните с программы, которая простоскелет включаемых файлов и пустая основная функция.Это покажет, что вы написали int main(void); неправильно.Это должно быть int main() {.
  • Начните с вызова функции printf, который выводит только набранное вами число. Это должно показать вам, что вы неправильно указали printf аргументы.Почему вы думаете, что переменные должны быть внутри строки в двойных кавычках?И если у вас есть аргументы в правильном месте, почему вы думаете, что printf с двумя преобразованиями (% s и% d) будет работать с четырьмя аргументами?

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

Также я рекомендую компилировать с максимальным уровнем параметров предупреждений.Это могло бы сказать, что утверждение printf неверно.Я считаю, что это по умолчанию для Microsoft Visual Studio в режиме отладки.Для GCC в Linux или BSD вы добавляете -Wall -W к вашей команде gcc.

2 голосов
/ 01 декабря 2011

Изменить int main (void); на:

int main (void) {

Вы используете int main (void); для объявления прототипа, но должны открывать скобки, чтобы начать фактическое содержание функции.

2 голосов
/ 01 декабря 2011

Удалите ; из конца следующей строки int main(void); и вставьте вместо него {.

1 голос
/ 01 декабря 2011

Объединение подсказок других:

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

struct worker {
    char name[10];
    int salary;
};

int main(int argc, const char *argv[])
{
    struct worker p1 = {"koko", 3400};
    printf ("name=%s,salary=%d\n",p1.name,p1.salary);
    return 0;
}

Обратите внимание, как

  • p1.name и p1.salary ссылаются на поля внутри p1 (типа worker)
  • объявление main было исправлено
1 голос
/ 01 декабря 2011

У вас есть синтаксическая ошибка в определении main ().Нужна открывающая фигурная скобка, а не точка с запятой.

0 голосов
/ 01 декабря 2011

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

Не стесняйтесь исправлять меня, если я ошибаюсь.

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