• C

Need Some Help...

I have some code that I can't get to compile - I just want to get the switch and functions to work properly...

Here's the code:

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

/* This is the first function in the video store menu.
      it is the menus Find video(s) (by title, type, or actors) option */
      void find(void)
      {
    printf("This option not available yet.  Or words to that effect. \n");
      }

/* This is the second function in the video store menu.
      it is the Check out video(s) option */
      void check_out(void)
      {
    printf("This option not available yet.  Or words to that effect. \n");
      }

/* This is the third function in the video store menu.
      it is the Return video(s) option */
      void return_videos(void)
      {
    printf("This option not available yet.  Or words to that effect. \n");
      }

/* This is the fourth function in the video store menu.
      it is the Find all videos out to a customer option */
      void find_videos(void)
      {
    printf("This option not available yet.  Or words to that effect. \n");
      }

/* This is the fifth function in the video store menu.
      it is the Add new video(s) option */
      void add_videos(void)
      {
    printf("This option not available yet.  Or words to that effect. \n");
      }

/* This is the sixth function in the video store menu.
      it is the Print inventory list (sorted by...) option */
      void print_inventory(void)
      {
    printf("This option not available yet.  Or words to that effect. \n");
      }

int main(void)
{
      int retval;                              /* Switch Determinant */
      int menu_val;                        /* input from user for menu  
      
      printf( "SchlockLustre Video Stores -  Main Menu: \n");
      printf( "DESCRIPTION/FUNCTION:                        ENTER NUMBER: \n");
      printf( "Find video(s) (by title, type, or actors) -       1 \n");
      printf( "Check out video(s)                        -       2 \n");
      printf( "Return video(s)                           -       3 \n");
      printf( "Find all videos out to a customer         -       4 \n");
      printf( "Add new video(s)                          -       5 \n");
      printf( "Print inventory list (sorted by...)       -       6 \n");

      while ((num = scanf("%i, & menu_val)) == 1)
      {
          switch (menu_val)
        {
              case 1:
            retval = find();
            break;

              case 2:
              retval = check_out();
              break;

              case 3:
              retval = return_videos();
              break;
              
              case 4:
            retval = find_videos();
            break;

              case 5:
              retval = add_videos();
              break;

              case 6:
              retval = print_inventory();
              break;
                       
 /* not too sure about what to do here dude... */
    /*    default: */
        /* error handling goes here */
    /*    retval = ERROR_VALUE; */
    /*    break; */
    /*    }       */

 /*   return(retval);  */
   
      }                  
            
      return EXIT_SUCCESS;
      
}      


Any ideas?

Thanks,

mapper
mapperAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jkrCommented:
Your problem is that all of the functions called from within your switch statement return 'void'. Change the 'switch' to read

int main(void)
{
int retval; /* Switch Determinant */
int menu_val; /* input from user for menu  

printf( "SchlockLustre Video Stores -  Main Menu: \n");
printf( "DESCRIPTION/FUNCTION:                        ENTER NUMBER: \n");
printf( "Find video(s) (by title, type, or actors) -       1 \n");
printf( "Check out video(s)                        -       2 \n");
printf( "Return video(s)                           -       3 \n");
printf( "Find all videos out to a customer         -       4 \n");
printf( "Add new video(s)                          -       5 \n");
printf( "Print inventory list (sorted by...)       -       6 \n");

while ((num = scanf("%i, & menu_val)) == 1)
{
     switch (menu_val)
        {
         case 1:
            find();
            break;

        case 2:
        check_out();
        break;

        case 3:
        return_videos();
        break;
        
        case 4:
            find_videos();
            break;

        case 5:
        add_videos();
        break;

        case 6:
        print_inventory();
        break;
                       
 /* not too sure about what to do here dude... */
    /*    default: */
        /* error handling goes here */
    /*    ERROR_VALUE; */
    /*    break; */
    /*    } */

 /*   return(retval);  */
    
}

return EXIT_SUCCESS;

}

and it should work...
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
jkrCommented:
Or, if you want to use a return value, change toht code to read

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

/* This is the first function in the video store menu.
it is the menus Find video(s) (by title, type, or actors) option */
int find(void)
{
    printf("This option not available yet.  Or words to that effect. \n");
    return ( 0);
}

/* This is the second function in the video store menu.
it is the Check out video(s) option */
int check_out(void)
{
    printf("This option not available yet.  Or words to that effect. \n");
    return ( 0);
}

/* This is the third function in the video store menu.
it is the Return video(s) option */
int return_videos(void)
{
    printf("This option not available yet.  Or words to that effect. \n");
    return ( 0);
}

/* This is the fourth function in the video store menu.
it is the Find all videos out to a customer option */
int find_videos(void)
{
    printf("This option not available yet.  Or words to that effect. \n");
    return ( 0);
}

/* This is the fifth function in the video store menu.
it is the Add new video(s) option */
int add_videos(void)
{
    printf("This option not available yet.  Or words to that effect. \n");
    return ( 0);
}

/* This is the sixth function in the video store menu.
it is the Print inventory list (sorted by...) option */
int print_inventory(void)
{
    printf("This option not available yet.  Or words to that effect. \n");
    return ( 0);
}

int main(void)
{
int retval; /* Switch Determinant */
int menu_val; /* input from user for menu  

printf( "SchlockLustre Video Stores -  Main Menu: \n");
printf( "DESCRIPTION/FUNCTION:                        ENTER NUMBER: \n");
printf( "Find video(s) (by title, type, or actors) -       1 \n");
printf( "Check out video(s)                        -       2 \n");
printf( "Return video(s)                           -       3 \n");
printf( "Find all videos out to a customer         -       4 \n");
printf( "Add new video(s)                          -       5 \n");
printf( "Print inventory list (sorted by...)       -       6 \n");

while ((num = scanf("%i, & menu_val)) == 1)
{
     switch (menu_val)
        {
         case 1:
            retval = find();
            break;

        case 2:
        retval = check_out();
        break;

        case 3:
        retval = return_videos();
        break;
        
        case 4:
            retval = find_videos();
            break;

        case 5:
        retval = add_videos();
        break;

        case 6:
        retval = print_inventory();
        break;
                       
 /* not too sure about what to do here dude... */
    /*    default: */
        /* error handling goes here */
    /*    retval = ERROR_VALUE; */
    /*    break; */
    /*    } */

 /*   return(retval);  */
    
}

return EXIT_SUCCESS;

}
0
jkrCommented:
The compiler simply won't accept

        retval = print_inventory();

when 'print_inventory();'

is declared as

void print_inventory( void);

as an 'int' cant be assigned a 'void' value...


Feel free to ask if you neeed more information!
0
What were the top attacks of Q1 2018?

The Threat Lab team analyzes data from WatchGuard’s Firebox Feed, internal and partner threat intelligence, and a research honeynet, to provide insightful analysis about the top threats on the Internet. Check out our Q1 2018 report for smart, practical security advice today!

mapperAuthor Commented:
Jkr,

You left a lot for me to determine...

That's why I gave you the low mark...

Thanks though...

mapper
0
jkrCommented:
<shrug> - you should have asked if you needed more information...
0
mapperAuthor Commented:
Jkr -

Yeah - you're are 100% correct and I am sorry for my earlier choice of words - I have almost hammered out my problems except that the function is returning two lines form printf before it lets the user enter any information:

void add_videos(char *title, char *type, char *actor)
{
printf("Enter the title of the video?\n");
gets(title);
printf("What type is the video?\n");
gets(type);
printf("Enter upto three actors seperated by spaces:\n");
gets(actor);
}

in the main I have:

case 5:
add_videos(title, type, actor);
break;

Here is what the code looks like when it runs:

SCHLOCKLUSTER VIDEO  -  Main Menu:

DESCRIPTION/FUNCTION:                        ENTER NUMBER:
Find video(s) (by title, type, or actors) -       1
Check out video(s)                        -       2
Return video(s)                           -       3
Find all videos out to a customer         -       4
Add new video(s)                          -       5
Print inventory list (sorted by...)       -       6

5
Enter the title of the video?
What type is the video?


See what I mean?  It should give me the first line and I should be able to enter a string and then hit enter before it printf the second line...

I will float another question if you like.

Thanks,

mapper
0
jkrCommented:
That's indeed strange - try

void add_videos(char *title, char *type, char *actor)
{
printf("Enter the title of the video?\n");
fflush ( stdin);
gets(title);
printf("What type is the video?\n");
fflush ( stdin);
gets(type);
printf("Enter upto three actors seperated by spaces:\n");
fflush ( stdin);
gets(actor);
}
0
mapperAuthor Commented:
Jkr,

I found the fflush last night while reading and it worked! I used it in the following manner:

void add_videos(char *title, char *type, char *actor)
{
    fflush(stdin);
    printf("\nEnter the title of the video?\n");
    gets(title);
    printf("What genre is the video?\n");
    gets(type);
    printf("Enter upto three actors seperated by spaces:\n");
    gets(actor);
}

I appreciate your input though...  I am studying arrays and pointers now - I want to be able to store the data from the add_video function to an array...  I am hoping that by early next week I should be able to start morphing on it!

Thanks again,

mapper
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.