Первая проблема в том, что ваша структура неверна.Вы не можете сохранить имя сотрудника в поле имени, так как это только один байт.Вы должны сделать его массивом (в данном случае это проще) или указателем на выделенную память.
Если вы хотите сделать его массивом, то вы должны определить максимальный размер массива.В нашем примере мы просто сделаем его размером 100 байт, этого будет более чем достаточно для хранения любого имени.
#define MAX_NAME 100
typedef struct employeeType
{
char name[MAX_NAME];
int employeeNumber;
float salary;
float taxPercentage;
}EMPLOYEE;
Во-вторых, имя вашей функции сбивает с толку.enterDetails должен просто заполнить структуру, которую вы передали.В-третьих, вводимые вами данные должны принимать указатель на структуру EMPLOYEE.Если вы хотите передать какое-либо значение функции, которая будет изменять ее содержимое, то вы можете сделать это только с помощью указателей (или ссылок, если вы используете C ++, но это в основном указатель).Так что enterDetails должно быть,
void enterDetails(EMPLOYEE *details)
{
printf("\nEnter the employee's name ");
scanf("%s", details->name); // this isn't secure since it doesn't perform bound checking.
printf("\nEnter employee number ");
scanf("%d", &details->employeeNumber);
printf("\nEnter employee salary ");
scanf("%f", &details->salary);
printf("\nEnter tax percentage ");
scanf("%f", &details->taxPercentage);
}
И, наконец, если вы хотите сохранить содержимое структуры в файл, который вы хотите, чтобы люди читали, то вы должны отформатировать содержимое структуры и выгрузить его нафайл.
int writeToFile(EMPLOYEE *details) /* accepting the structure will work as well but it's faster and efficient to pass the structure's pointer */
{
FILE *file;
file = fopen("employees.txt","w");
if(file == NULL) {
printf("File error!!!");
return 0;
}
fprintf(file, "\nEmployee Name: %s", details->name);
fprintf(file, "\nEmployee Number: %d", details->employeeNumber);
fprintf(file, "\nSalary: %f", details->salary);
fprintf(file, "\nTax Percentage: %f", details->taxPercentage);
fclose(file)
return 1;
}
И main
int main(void)
{
EMPLOYEE details;
enterDetails(&details); // passing the pointer here is a must
if (!writeToFile(&details)) { // passing the pointer since it's faster
printf("\nError writing to file");
return 1;
} else {
printf("\nSuccess!");
return 0;
}
}
И в вашем случае вам не нужно передавать какие-либо параметры в main.Но если вы хотите знать, как передавать параметры, приведу краткий пример.
int main(int argc, char **argv)
{
int i;
for (i = 0; i < argc; i++)
printf("\n%s", argv[i]);
return 0;
}