#c
#c
Вопрос:
я пытаюсь изучить новый алгоритм с помощью struct на 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",amp;ch );
if (ch == 1) {
printf("Input Name : " );
scanf("%s",casher1.name );
printf("Input ID : " );
scanf("%s",casher1.ID );
printf("Input Salary : " );
scanf("%d",amp;casher1.salary);
printf("Input T : " );
scanf("%d",amp;casher1.T );
printf("n");
casher1.salary = casher1.salary casher1.T;
printf("ID : %sn",casher1.ID );
printf("Name : %sn",casher1.name );
printf("Salary : %dn",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",amp;casher2.salary);
printf("Input T : " );
scanf("%d",amp;casher2.T );
printf("n");
casher2.salary = casher2.salary casher2.T;
printf("ID : %sn",casher2.ID );
printf("Name : %sn",casher2.name );
printf("Salary : %dn",casher2.salary );
}
return 0;
}
Я ожидал, что такой результат будет для каждого кэшера
Идентификатор: 12345
Название: тест
Зарплата: 2000 долларов
Комментарии:
1. Что вам действительно нужно, так это функция, а не цикл или массив. (Вы также могли бы использовать цикл и массив, но это перебор всего для 2 кассиров.) Вы уже изучили их?
2. @JimBalter нет. я еще не изучал это
3. функции — самый мощный инструмент в программировании… Я предлагаю подождать, пока вы не узнаете о них, а не использовать цикл здесь.
4. если вы измените
casher1,casher2
наcasher[2]
, то у вас будет массив из двух элементов.5. Можно использовать массив, но тогда каждая ссылка должна быть проиндексирована. Я думаю, было бы лучше сначала изучить функции и указатели.
Ответ №1:
Если вы еще не изучали функции, вам следует немного почитать о них. Я не знаю, что именно вы пытаетесь сделать, потому что вы больше не используете 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",amp;ch );
if( 1 == ch ){
casherFunction(amp;casher1);
}else if( 2 == ch ){
casherFunction(amp;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",amp;casher->salary);
printf("Input T : " );
scanf("%ld",amp;casher->T );
printf("n");
casher->salary = casher->salary casher->T;
printf("ID : %sn",casher->ID );
printf("Name : %sn",casher->name );
printf("Salary : %ldn",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",amp;casher->salary);
printf("Input T : " );
scanf("%ld",amp;casher->T );
printf("n");
casher->salary = casher->salary casher->T;
printf("ID : %sn",casher->ID );
printf("Name : %sn",casher->name );
printf("Salary : %ldn",casher->salary );
return 0;
}
возвращаемое значение 0 является стандартным возвращаемым значением при отсутствии ошибок.
Обратите также внимание, что функция ожидает указатель, casherFunction(struct employee *casher)
поэтому при вызове функции мы пишем: casherFunction(amp;casher1)
с amp;
.
Кроме того, элементы в указателе структуры находятся под 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",amp;ch );
if( 1 == ch ){
casherFunction(amp;casher1);
}else if( 2 == ch ){
casherFunction(amp;casher2);
}
printf("%ldnn",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",amp;casher->salary);
printf("Input T : " );
scanf("%ld",amp;casher->T );
printf("n");
casher->salary = casher->salary casher->T;
printf("ID : %sn",casher->ID );
printf("Name : %sn",casher->name );
printf("Salary : %ldn",casher->salary );
return 0;
}
int casherShow(struct employee casher){
printf("Name: ");
printf("%sn",casher.name );
printf("Input ID : " );
printf("%sn",casher.ID );
printf("Salary : " );
printf("%ldn",casher.salary);
return 0;
}