Ожидаются 2 ошибки компилятора ';'в конце списка объявлений и поля 'x', объявленного как функция? - PullRequest
0 голосов
/ 14 апреля 2019

На этой неделе я работаю над своим домашним заданием в классе C и столкнулся с двумя ошибками при компиляции программы. Я использую repl.it, если это имеет значение. Целью задания является создание программы, которая будет компьютеризировать медицинские записи. Он запрашивает у пользователя имя, частоту сердечных сокращений, высоту, ИМТ, день рождения и т. Д., А затем выкладывает их назад, чтобы пользователь мог их увидеть, но я не могу обойти эти две проклятые ошибки!

Две ошибки:

clang version 7.0.0-3~ubuntu0.18.04.1 (tags/RELEASE_700/final)
exit status 1
main.c:9:14: error: expected ';' at end of declaration list
  void read() {
             ^
             ;
main.c:9:8: error: field 'read' declared as a function
  void read() {
       ^
2 errors generated.

Вот код моей программы, любая помощь будет отличной!

#include <stdio.h>

struct HealthProfile {

  char firstName[10], lastName[10], gender[2];

  int height, weight, day, month, year, current_year, tHR, maxHR, HR;

  void read() {
    printf("Please enter the patient's last name \n");
    scanf("%s", lastName);
    printf("Please enter the patient's first name \n");
    scanf("%s", firstName);
    printf("Please enter the patient's gender(M/F) \n");
    scanf("%s", gender);
    printf("Please enter the current year \n");
    scanf("%d", &current_year);
    printf("Please enter the patient's birthdate as mm/dd/yyyy \n");
    scanf("%d/%d/%d", &month, &day, &year);
    printf("Please enter the patient's height in inches \n");
    scanf("%d", &height);
    printf("Please enter the patient's weight in pounds \n");
    scanf("%d", &weight);
    printf("Please enter the patient's heart rate \n");
    scanf("%d", &HR);
  }
  int Bmi() {
    return ((703 * weight) / (height * height));
  }
  int age() {
    return (current_year - year);
  }
  void heartRate() {
    /* as no formula and parameters are given for calculating heart rate So defaults has been taken*/

    int maxrate = 220;
    int heartrate = maxrate - age();
    int val = heartrate - HR;

    float res1 = (val * 0.4);
    float res2 = (val * 0.6);

    float targetmin = res1 + HR;
    float targetmax = res2 + HR;

    printf("\nHeart beat low rate: %.1f - %.1f", targetmin, targetmax);

    res1 = (val * 0.6);
    res2 = (val * 0.7);

    targetmin = res1 + HR;
    targetmax = res2 + HR;
    printf("\nHeart beat medium rate: %.1f - %.1f", targetmin, targetmax);

    res1 = (val * 0.7);
    res2 = (val * 0.85);

    targetmin = res1 + HR;
    targetmax = res2 + HR;
    printf("\nHeart beat high rate: %.1f - %.1f", targetmin, targetmax);
  }

  void display() {
    printf("The patient's name %s %s \n", firstName, lastName);
    printf("The patient's gender %s \n", gender);
    printf("The patient's birthdate %d/%d/%d \n", month, day, year);
    printf("The patient's height %d \n", height);
    printf("The patient's weight %d\n", weight);
    printf("The patient's age %d \n", age());
    printf("The patient's BMI %d \n", Bmi());
    heartRate();
  }
};

int main() {
  struct HealthProfile HP;
  HP.read()
  HP.display()

  return 0;
}

Ответы [ 2 ]

2 голосов
/ 14 апреля 2019

Это не C ++; struct не может содержать функции. Вместо этого вам нужно объявить эти функции вне struct, и они должны взять дескриптор структуры в качестве аргумента.

int age(const struct HealthProfile *hp)
{
    return (hp->current_year - hp->year);
}

Просмотрите операторы -> и ., которые используются для доступа и изменения элементов структуры.

Или переключитесь на компилятор C ++ и используйте class вместо struct.

0 голосов
/ 14 апреля 2019

Во-первых, отказ от ответственности, не очень опытный в C или C ++, так что, возможно, это не лучший способ сделать это.

Я загрузил полный код в pastebin , как яУ меня было несколько проблем с публикацией здесь.Что я сделал, так это переместил подпрограммы из структуры и заставил подпрограммы вместо этого взять структуру в качестве аргумента.Таким образом структура выглядит следующим образом:

struct HealthProfile { char firstName[10], lastName[10], gender[2]; int height, weight, day, month, year, current_year, tHR, maxHR, HR;};

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