Как сделать код более простым с Looping или Array? - PullRequest
1 голос
/ 23 апреля 2019

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

struct employee{
  char ID[6];
  char name[20];
  char address[50];
  long salary;
  long T;
}casher1,casher2;

int main(int argc, char const *argv[]) {
  int ch;
  printf("Choose : ");
  scanf("%d",&ch );
  if (ch == 1) {
    printf("Input Name : " );
    scanf("%s",casher1.name );
    printf("Input ID : " );
    scanf("%s",casher1.ID );
    printf("Input Salary : " );
    scanf("%d",&casher1.salary);
    printf("Input T : " );
    scanf("%d",&casher1.T );
    printf("\n");
    casher1.salary = casher1.salary + casher1.T;

    printf("ID : %s\n",casher1.ID );
    printf("Name : %s\n",casher1.name );
    printf("Salary : %d\n",casher1.salary );
  }
  else if(ch == 2) {
    printf("Input Name : " );
    scanf("%s",casher2.name );
    printf("Input ID : " );
    scanf("%s",casher2.ID );
    printf("Input Salary : " );
    scanf("%d",&casher2.salary);
    printf("Input T : " );
    scanf("%d",&casher2.T );
    printf("\n");
    casher2.salary = casher2.salary + casher2.T;

    printf("ID : %s\n",casher2.ID );
    printf("Name : %s\n",casher2.name );
    printf("Salary : %d\n",casher2.salary );
  }

  return 0;
}

Я ожидал, что результат будет таким для каждого кешера ID: 12345 Имя: тест Зарплата: $ 2000

1 Ответ

1 голос
/ 23 апреля 2019

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

В этом случае, без необходимости помещать кэширование в массив, вы можете создать функцию, которая принимает кэширование в качестве аргумента,

#include <stdio.h>

struct employee{
  char ID[6];
  char name[20];
  char address[50];
  long salary;
  long T;
}casher1,casher2;

int casherFunction(struct employee *casher);

int main(int argc, char const *argv[]) {
  int ch;
  printf("Choose : ");
  scanf("%d",&ch );
  if( 1 == ch ){
    casherFunction(&casher1);
  }else if( 2 == ch ){
    casherFunction(&casher2);
  }
  return 0;
}

int casherFunction(struct employee *casher){
   printf("Input Name : " );
    scanf("%s",casher->name );
    printf("Input ID : " );
    scanf("%s",casher->ID );
    printf("Input Salary : " );
    scanf("%ld",&casher->salary);
    printf("Input T : " );
    scanf("%ld",&casher->T );
    printf("\n");
    casher->salary = casher->salary + casher->T;

    printf("ID : %s\n",casher->ID );
    printf("Name : %s\n",casher->name );
    printf("Salary : %ld\n",casher->salary );
    return 0;
}

Итак, сначала вы объявляетефункция:

int casherFunction(struct employee *casher);

и затем после основного вы определяете его:

int casherFunction(struct employee *casher){
       printf("Input Name : " );
        scanf("%s",casher->name );
        printf("Input ID : " );
        scanf("%s",casher->ID );
        printf("Input Salary : " );
        scanf("%ld",&casher->salary);
        printf("Input T : " );
        scanf("%ld",&casher->T );
        printf("\n");
        casher->salary = casher->salary + casher->T;

        printf("ID : %s\n",casher->ID );
        printf("Name : %s\n",casher->name );
        printf("Salary : %ld\n",casher->salary );
        return 0;
    }

возвращаемое значение 0 является стандартным возвращаемым значением, если ошибок нет.

Примечаниетакже, что функция ожидает указатель casherFunction(struct employee *casher), поэтому при вызове функции мы пишем: casherFunction(&casher1) с &.

Кроме того, элементы в указателе структуры находятся под casher->ID вместоcasher.ID.

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

Код будет:

#include <stdio.h>

struct employee{
  char ID[6];
  char name[20];
  char address[50];
  long salary;
  long T;
}casher1,casher2;

int casherFunction(struct employee *casher);
int casherShow(struct employee casher);

int main(int argc, char const *argv[]) {
  int ch;
  printf("Choose : ");
  scanf("%d",&ch );
  if( 1 == ch ){
    casherFunction(&casher1);
  }else if( 2 == ch ){
    casherFunction(&casher2);
  }
    printf("%ld\n\n",casher1.salary);
    casherShow(casher1);

  return 0;
}

int casherFunction(struct employee *casher){
   printf("Input Name : " );
    scanf("%s",casher->name );
    printf("Input ID : " );
    scanf("%s",casher->ID );
    printf("Input Salary : " );
    scanf("%ld",&casher->salary);
    printf("Input T : " );
    scanf("%ld",&casher->T );
    printf("\n");
    casher->salary = casher->salary + casher->T;

    printf("ID : %s\n",casher->ID );
    printf("Name : %s\n",casher->name );
    printf("Salary : %ld\n",casher->salary );
    return 0;
}

int casherShow(struct employee casher){
    printf("Name: ");
    printf("%s\n",casher.name );
    printf("Input ID : " );
    printf("%s\n",casher.ID );
    printf("Salary : " );
    printf("%ld\n",casher.salary);
    return 0;   
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...