c - C语言工资单生成程序

标签 c

这是问题:

Write an interactive program to generate pay slips for the staff of size 12 employees (2 members are clerks, one computer operator, 6 salesmen, 3 helpers) , working in a small chemist retail shop. Assumptions can be made wherever necessary. The payslip should display the employee no., employee name, no. of days worked during the month, date of generation of the payslip, month for which the salary is being paid, all the details of the payment, deductions, gross-pay and net-pay.

当我运行程序时,它说无效指针,即使我没有使用指针 谁能告诉我这个程序有什么错误吗?

 #include <time.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>

    char name[30][30], designation[20[20], empid[12][12];
    int i;
    int n = 12;
    int working_days = 27;
    float basic[12], days_absent[12], days_present[12], gross_salary[20], pf[12], allowance[12], net[12];

    void enter_details_of_employee();
    void display();
    void get_time();

    void main()
    {
    int k;
    printf("Enter 1 to enter employee details and 2 to display salary\n");
    scanf("%d", &k);

    if(k == 1)
    {
    enter_details_of_employee();
    }
    else if(k == 2)
    {
    display();
    get_time();
    }
    else
    {
    printf("invalid choice");
    }
    }


    void enter_details_of_employee ()
    {
    int choice;
    int clerk_counter = 0, operator_counter = 0, salesman_counter = 0, helper_counter = 0, max = 0;

    do {

    printf("\n enter details of employees\n");

    printf("enter employee name\n");
    scanf("%c", &name);

    printf("enter employee id\n");
    scanf("%c", &empid);

    printf("enter your choice for employee designation\n 1.clerk \n 2.computer operator\n 3. salesman\n 4.helper\n");
    scanf("%d", &choice);

    if (choice == 1)
    {
    if(clerk_counter == 2)
            {
                printf("sorry, you have already entered the details of all clerks\n");
            }

                else

            {
                designation = "clerk";
                basic = 8000.00;
                printf("enter no of days absent\n");
                scanf("%d", &days_absent);
                days_present = working_days - days_absent;
                gross_salary = basic - ((days_absent / working_days) * basic);
                pf = gross_salary*0.1;
                allowance = gross_salary*0.55;
                net = (gross - pf) + allowance;
                clerk_counter++;

            }



        }
        else if (choice == 2)
        {
                if(operator_counter == 1)
            {
                printf("sorry, you have already entered the details of all computer operators\n");
            }

                else

            {
                designation = "computer operator";
                basic = 9000;
                printf("enter no of days absent\n);
                scanf("%d", &days_absent);
                days_present = working_days - days_absent;
                gross_salary = basic - ((days_absent / working_days) * basic);
                pf = gross_salary*0.12;
                allowance = gross_salary*0.75;
                net = (gross - pf) + allowance;
                operator_counter++;

            }


        }

        else if (choice == 3)
        {
                if(salesman_counter == 6)
            {
                printf("sorry, you have already entered the details of all salesman\n");
            }

                else

            {
                designation = "salesman";
                basic = 10000;
                printf("enter no of days absent\n);
                scanf("%d", &days_absent);
                days_present = working_days - days_absent;
                gross_salary = basic - ((days_absent / working_days) * basic);
                pf = gross_salary*0.15;
                allowance = gross_salary*0.95;
                net = (gross - pf) + allowance;
                salesman_counter++;

            }


        }

    else if (choice == 4)
        {
                if(salesman_counter == 3)
            {
                printf("sorry, you have already entered the details of all helpers\n");
            }

                else

            {
                designation = "helper";
                basic = 6500;
                printf("enter no of days absent\n);
                scanf("%d", &days_absent);
                days_present = working_days - days_absent;
                gross_salary = basic - ((days_absent / working_days) * basic);
                pf = gross_salary*0.08;
                allowance = gross_salary*0.45;
                net = (gross - pf) + allowance;
                helper_counter++;

            }


    }

    else
        {
    printf("invalid choice");
        }

        }
        while (max!=12);
        }

    void get_time()
    {
    time_t t = time(NULL);
    struct tm tm = *localtime(&t);

    printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
    }

    void display()
    {
    printf("SALARY SLIP OF EMPLOYEES ";
    printf("---------------------------------------------------------------------------------------------------");
    printf("empid\t name\t days_absent\t days_present\t gross_salary\t   PF\t allowance\t net");
    printf("---------------------------------------------------------------------------------------------------");

    for(i=0;i<n;i++)
    {
        printf(empid[i][i] name[i][i] basic[i] days_absent[i] days_present[i] gross_salary[i] pf[i] allowance[i] net);
    }

    }

最佳答案

错误:

1)语法错误1:

char name[30][30], designation[20[20], empid[12][12];  // Bracket mismatch

2)语法错误2:

char designation[20[20];
designation = "clerk";    // What is this?? ..the invalid pointer error

3) 自己休息一下或者尝试使用 -Wall 选项进行编译。

关于c - C语言工资单生成程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18784086/

相关文章:

c - C 中的梯形黎曼和

我可以计算 scanf 的参数数量吗?

c - 为什么 vmalloc 返回的地址不能转换为物理地址

c - Lua C API : handling large numbers

c - 针对比使用 libc 构建的更新的 linux 头文件构建

c - 如何在 clion 中使用像 wc 这样的 GNU 扩展作为 execvp 的参数?

c - 解析已解析的字符串

c - ioct 多个参数传递

c - 尝试在 Linux 上的 C/C++ 中使用 lp_solve 时出现 "undefined reference"

c++ - 为什么 strlen() 比手动循环检查空终止字符快大约 20 倍?