Как сделать функцию добавления новых элементов в таблицу periodi c? - PullRequest
0 голосов
/ 30 марта 2020

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

struct element {
  int atno;
  char name[20];
  char symbol[20];
  char mn[20];
  float bp;
  char state[20];
};

int n = 118, i = 0;
void add(struct element e[], int n);

int main() {
  struct element e[n];
  e[0].atno = 1;
  strcpy(e[0].name, "Hydrogen");
  strcpy(e[0].symbol, "H");
  strcpy(e[0].mn, "Metal");
  e[0].bp = -252.879;
  strcpy(e[0].state, "Gas");

  e[1].atno = 2;
  strcpy(e[1].name, "Helium");
  strcpy(e[1].symbol, "He");
  strcpy(e[1].mn, "Non-Metal");
  e[1].bp = -268.28;
  strcpy(e[1].state, "Gas");

  add(e, n);
}

void add(struct element e[], int n) {
  int t;
  int an[150];
  for (int i = 1; i <= n; i++) {
    an[i] = i;
  }
  printf("Enter the atomic number of the element you want to add: ");
  scanf("%d", &t);
  for (int i = 1; i <= n; i++) {
    if (an[i] == t) {
      printf("The element already exists");
    } else {
      e[t - 1].atno = t;
      printf("Enter the Name:");
      scanf("%s", (e[t - 1].name));
      printf("Enter the Symbol:");
      scanf("%s", (e[t - 1].symbol));
      printf("Enter the Boiling Point:");
      scanf("%f", e[t - 1].bp);
      printf("Enter whether it is metal/non metal:");
      scanf("%s", (e[t - 1].mn));
      printf("Enter the state at room temperature:");
      scanf("%s", (e[t - 1].state));

      an[t] = t;
    }
  }
}

1 Ответ

0 голосов
/ 30 марта 2020

есть некоторые ошибки

сначала с этим l oop:

 for (int i = 1; i <= n; i++)
    {
        an[i] = i;
    }

каждый элемент ввода будет существовать, и поэтому у вас не может быть больше элементов. Вам нужно сравнить t с e[i].atno.

вы должны использовать & в scanf для float. scanf("%lf", e[t - 1].bp); это должно быть scanf("%lf", &e[t - 1].bp); (это не похоже на строки)

наконец, так как вы назначаете double vlaue в main для вашего bp, я конвертирую float в double.

struct element {
    int atno;
    char name[20];
    char symbol[20];
    char mn[20];
    double bp;//warning since you have assigned double type to it in main
    char state[20];
};

int n = 118, i = 0;
void add(struct element e[], int n);

int main() {
    struct element e[n];
    e[0].atno = 1;
    strcpy(e[0].name, "Hydrogen");
    strcpy(e[0].symbol, "H");
    strcpy(e[0].mn, "Metal");
    e[0].bp = -252.879;
    strcpy(e[0].state, "Gas");

    e[1].atno = 2;
    strcpy(e[1].name, "Helium");
    strcpy(e[1].symbol, "He");
    strcpy(e[1].mn, "Non-Metal");
    e[1].bp = -268.28;
    strcpy(e[1].state, "Gas");

    add(e, n);
}

void add(struct element e[], int n)
{
    int t;
    int an[150];
  /*  for (int i = 1; i <= n; i++)
    {
        an[i] = i;
    }*///every element will exits with your method
    printf("Enter the atomic number of the element you want to add: ");
    scanf("%d", &t);
    int check = 0;
    for (int i = 0; i < n; i++)
    {
        if (e[i].atno == t)
        {
            printf("The element already exists");
            check = 1;
            break;
        }
    }
    if (check == 0)
    {
        e[t - 1].atno = t;
        printf("Enter the Name:");
        scanf("%s", (e[t - 1].name));
        printf("Enter the Symbol:");
        scanf("%s", (e[t - 1].symbol));
        printf("Enter the Boiling Point:");
        scanf("%lf", &e[t - 1].bp);
        printf("Enter whether it is metal/non metal:");
        scanf("%s", (e[t - 1].mn));
        printf("Enter the state at room temperature:");
        scanf("%s", (e[t - 1].state));
 //call menu function
    }

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