简体   繁体   中英

If statement with Strcmp using structures and Array isnt working

Encountering several problems, you will constantly see me on here begging for help. Im very very new to C . Doing a program with about 5 functions for a school based assessment. The program is coupled with a problem definition for problems encountered in an imaginary business. There are five functions so far.

Function 1: MembershipInfo stores membership information for the company (which is like a club with a subscription/membership system)

Function 2: SelectService is supposed to display and prompt the user to choose various services that can be offered to them. It uses a struct and and an array and various ifs. The if statement does not run, or doesn't show up on the console after being built successfully.

Function 3: payment' calculates the full cost a member is to pay based on his/her membership type. The calculation outputs 0.0000 .

Function 4: is like function 1 but caters for a customer who wishes to uses some of the services on an hourly rate without becoming a member. The calculations on this output 0.0000 as well.

Function 5: MemberExp is supposed to keep track of the date in which a member's membership expires and alert the user. I suppose I would have to somehow collect group the date from each member in function 1 at the time of there registration and compare it with the date when their membership expires. I have an float variable known as pay-plan used to calculate the full cost. It is the amount of months one wishes to be a member for.

I am using Xcode on El Capitan .

My Code

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

struct MembershipInfo{



float regfee;
int set;
float payplan;
char cust_fname[20];
char cust_lname[20];
char memtype[20];
char date[20];

};

/*Functions */

void MembershipInfo();
void Payment();
void SelectService();
void MemberExp();
void Accomodation();

int q;
int x=0;
int set;
float memcost;
float Fullcost;
char selection[20];


/*MAIN FUNCTION */


int main()

{


char decision[20];

printf("Are you registering a member or is it accomodation?, type in lowercase \n");
scanf( "%s" , decision);

if ( strcmp (decision, "member") ==0)
{
    MembershipInfo();

}

else {
    ( strcmp(decision, "accomodation") ==0);
    Accomodation();
}


MemberExp();

}


/* Function used to store membership information */
void MembershipInfo()
{
struct MembershipInfo member[x];
printf("Press 1 to continue or any other character to cancel \n ");
scanf( "%d", &set);

if (set==1) {

while (set==1) {
    x++ ;
    printf( "Please enter the first name of member\n");
    scanf( "%s", member[x].cust_fname);

    printf( "Please enter the last name of member\n");
    scanf( "%s", member[x].cust_lname);

    printf( "Please enter Membership type:\n Silver\n Gold\n Platinum\n");
    scanf( "%s", member[x].memtype);

    SelectService();

    printf("Please enter payment plan\n"); /* An integer value from 1 to 12 which determines how much months are being paid for */
    scanf( "%f", &member[x].payplan);


    Payment();




    printf("Do you have another member to register? Type 1 to continue or any number to End\n");
    scanf( "%d", &set);

}
    main();

    }
main();

}


/* Function used to calculate the amount to be paid by each member */
void Payment()
{

struct MembershipInfo member[x];

if (strcmp(member[x].memtype, "Silver") ==0) {
    memcost = 100;

if (strcmp(member[x].memtype, "Gold") ==0) {
    memcost = 180;

if (strcmp(member[x].memtype, "Platinum") ==0) {
    memcost = 300;
}
}
}

Fullcost = memcost * member[x].payplan ;
printf(" The Full cost is %f \n", Fullcost);


}


/* Function to Select Services for Members */

void SelectService()
{

struct MembershipInfo member[x];
if (strcmp(member[x].memtype, "Silver") ==0) {
    printf("Check");
}

}



/*Function to determine Membership Expiration*/

void MemberExp()
{



}

void Accomodation()
{

struct Accomodationinfo{
    char ac_fname[20];
    char ac_lname[20];
    int hours;
    char date[30];
    char selection[20];
    int Fullcost; //Full Cost is an integer and not a float because hours will be rounded off and therefore customer will pay a rounded off value



};


struct Accomodationinfo customer[x];
printf("Press 1 to continue or any other number to cancel \n");
scanf( "%d" , &set);
if (set==1) {


    while (set==1){
    x++;
    printf("Please enter customer's first name \n");
    scanf( "%s", customer[x].ac_fname);

    printf("Please enter customer's last name \n");
    scanf( "%s" , customer[x].ac_lname);

printf("You have either the Gym, Sports Centres, or Music Studio available\n");
scanf( "%s" , customer[x].selection);

printf("How many hours?\n");
scanf( "%d", &customer[x].hours);

customer[x].Fullcost = customer[x].hours * 8;
printf("The full cost is %f  per hour \n" , Fullcost );
    getchar();
    printf( "%s %s will have access to %s for %d hours \n", customer[x].ac_fname, customer[x].ac_lname , customer[x].selection, &customer[x].hours );
        getchar();
    printf("Do you have another customer for accomodation? Press 1 to continue or any other number to return to main \n ");
    scanf( "%d" , &set);
    }
    main();
}
main();

}

SelectService Function

void SelectService()
{
    if (strcmp(Members[x].memtype, "Silver") ==0)
    {
        printf( "You have available any three of the following(Notice      the casino is not available):\n");
        printf( "Swimming Pools \n Spas \n Bars \n Arcade\n Sports Centres\n Resource Room\n Theatre\n Gym\n Food Courts\n Music Studio\n");
        for (q=0; q<4; q=q+1) {
            printf( "Please enter selection\n");
            scanf( "%s" , selection[q]);
            printf( "Your chosen selections are %s , %s and %s\n" , selection[1], selection[2], selection[3]);
    }


    if (strcmp(Members[x].memtype, "Gold") ==0) {
        printf( "You have available any five of the following\n");
        printf( "Casino \n Swimming Pools \n Spas \n Bars \n Arcade\n Sports Centres\n Resource Room\n Theatre\n Gym\n Food Courts\n Music Studio\n");
        for (q=0; q<6; q=q+1) {
            printf( "Please enter selection\n");
            scanf( "%s" , &selection[q]);


        }
        if (strcmp(Members[x].memtype, "Platinum") ==0) {
            printf( "You have all services available");
        }
    }
}

}

EDIT: The program keeps skipping over the function SelectService idk . Idk how to make this clearer. Try running it in your own compilers and access the problem?

the following code incorporates the comments, cleanly compiles, and is one possible implementation.

You will probably want to add more features

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>



#define MAX_DATE_LEN    (30)
#define MAX_MEMBERS     (100)
#define MAX_BUFFER_LEN  (20)
#define COST_PER_HOUR   (8)

struct MembershipInfo_t
{
    float regfee;
    int   set;
    unsigned payplan;
    char  cust_fname[ MAX_BUFFER_LEN ];
    char  cust_lname[ MAX_BUFFER_LEN ];
    char  memtype[ MAX_BUFFER_LEN ];
    char  date[ MAX_BUFFER_LEN ];
};


// prototypes
void processMembershipInfo( void );
void Payment( void );
void SelectService( void );
void MemberExp( void );
void processAccommodation( void );

//global data
struct MembershipInfo_t Members[ MAX_MEMBERS ];
int   numMembers = 0;

int q;
int x=0;
int set;
unsigned memcost;
unsigned Fullcost;
char selection[ MAX_BUFFER_LEN ];


/*MAIN FUNCTION */


int main( void )
{
    int done = 0;

    while( !done  && (x < MAX_MEMBERS) )
    {
        // clear stdin
        int ch;
        while( (ch = getchar()) != EOF && '\n' != ch );

        // display menu
        printf( "\nm: Member processing");
        printf( "\na: Accommodiation processing:");
        printf( "\nq: quit");
        printf( "\n");

        // get user menu selection
        int choice = 0;
        choice = getchar();

        // process the user menu choice
        switch( tolower(choice) )
        {
            case 'a':
                processAccommodation();
                break;

            case 'm':
                processMembershipInfo();
                break;

            case 'q':
                done = 1;
                break;

            default:
                printf( "\n %c is not a valid entry\n", (char)choice);
                break;
        } // end switch

        if( !done ) x++;  // step to next member entry in Members[] array
    } // end while


    if( x )
    {// then some members entered
        MemberExp();
    }
    return 0;
} // end function main()


/* Function used to store membership information */
void processMembershipInfo()
{
    printf( "Please enter the first name of member\n");
    scanf( " %19s", Members[x].cust_fname);

    printf( "Please enter the last name of member\n");
    scanf( " %19s", Members[x].cust_lname);

    printf( "Please enter Membership type:\n Silver\n Gold\n Platinum\n");
    scanf( " %19s", Members[x].memtype);

    SelectService();

    do
    {
        printf("Please enter payment plan range: 1...12 months\n"); /* An integer value from 1 to 12 which determines how much months are being paid for */
        scanf( "%u", &Members[x].payplan);
    } while( (1 > Members[x].payplan) && (12 < Members[x].payplan) );


    Payment();
} // end function: processMembershipInfo


/* Function used to calculate the amount to be paid by each member */
void Payment()
{
    if (strcmp(Members[x].memtype, "Silver") ==0)
    {
        memcost = 100;
    }

    else if (strcmp(Members[x].memtype, "Gold") ==0)
    {
        memcost = 180;
    }

    else if (strcmp(Members[x].memtype, "Platinum") ==0)
    {
        memcost = 300;
    }

    Fullcost = memcost * Members[x].payplan ;
    printf(" The Full cost is %u \n", Fullcost);
} // end function: Payment


/* Function to Select Services for Members */
void SelectService()
{
    if (strcmp(Members[x].memtype, "Silver") ==0)
    {
        printf("Check");
    }
}



/*Function to determine Membership Expiration*/

void MemberExp()
{

}

struct Accomodationinfo
{
    char       ac_fname[ MAX_BUFFER_LEN ];
    char       ac_lname[ MAX_BUFFER_LEN ];
    unsigned   hours;
    char       date[ MAX_DATE_LEN ];
    char       selection[ MAX_BUFFER_LEN ];
    unsigned   Fullcost; //Full Cost is an integer and not a float because hours will be rounded off and therefore customer will pay a rounded off value
};

void processAccommodation()
{

    struct Accomodationinfo customer;

    printf("Press 1 to continue or any other number to cancel \n");

    printf("Please enter customer's first name \n");
    scanf( " %19s", customer.ac_fname);

    printf("Please enter customer's last name \n");
    scanf( " %19s" , customer.ac_lname);

    printf("You have either the Gym, Sports Centres, or Music Studio available\n");
    scanf( " %19s" , customer.selection);

    printf("How many hours?\n");
    scanf( "%u", &customer.hours);

    customer.Fullcost = customer.hours * COST_PER_HOUR;
    printf("The full cost is $%u at $%u per hour \n", Fullcost, COST_PER_HOUR );

    printf( "%s %s will have access to %s for %u hours \n",
            customer.ac_fname,
            customer.ac_lname ,
            customer.selection,
            customer.hours );
} // end function: processAccommodation

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM