PART2 OENECTVES Review the do while loco enew the oawnile lo
     PART2 OENECTVES Review the do while loco enew the oa-wnile loop Review how to format the outout in column enew how to format the output in columns Holi to create nd call the user-defnedunctions Apply reference paramenter to uer-detined funcsion  #include  #include \"valid.c\"struct purch_detail {   char item_desc[20];   int unit_price;   int qty; };    void display();   void entryData();   void readFile();   void getName(char *str);   void getWriteFileName(char *);   void getReadFileName(char *);   void getzeroInteger(char *_chr, int *_value);    int count=0;   int total_price=0;   int total_amt=0;   char option;   char filename [14];   FILE *fp;   struct purch_detail *pd_ptr, *tmptr;    void main()   {       clrscr();       pd_ptr = (struct purch_detail *) malloc(sizeof(struct purch_detail) * 10);       tmptr = pd_ptr;      printf(\"\ Do you want to create the data file type \'y\' for yes and \'n\' for no.\");     scanf(\"%c\", &option);     fflush(NULL);        if( option == \'y\' || option == \'Y\')       {    printf(\"\ You can generate bill of maximum 10 item.\ \");        getWriteFileName(filename);        display();       }       elseif( option == \'n\' || option == \'N\')        {   getReadFileName(filename);        readFile();        }         getch();   }    void entryData()   {      while(1)      {       printf(\"\ Enter item name : \");       getName(tmptr->item_desc);        getPosInteger(\"Enter unit price of the item : \", &tmptr->unit_price);       getzeroInteger(\"Enter no of qty purchased : \", &tmptr->qty);        if(tmptr->qty == 0)         break;        count ++;       if (count >= 10)          break;      /* if ( count % 2 == 0)        if ( (pd_ptr = (struct purch_detail *) realloc(pd_ptr, sizeof(struct purch_detail) * 2)) == NULL)        {  printf(\"Realloc failed. No enough memory available.\");           break;        }        */        tmptr++;      }   }    void display()   {      tmptr = pd_ptr;       fprintf(fp,\"\ Item                 Unit Price Quantity  Total Price \");      fprintf(fp,\"\ ______________________________________________________\");       printf(\"\ Item                 Unit Price Quantity  Total Price \");      printf(\"\ ______________________________________________________\");      while(1)      {     total_price = tmptr->unit_price * tmptr->qty ;     fprintf(fp, \"\ %-20s      %4d    %4d     %5d\", tmptr->item_desc, tmptr->unit_price, tmptr->qty, total_price);     printf(\"\ %-20s      %4d    %4d     %5d\", tmptr->item_desc, tmptr->unit_price, tmptr->qty, total_price);     //printf(\"\");     total_amt += total_price;      count--;        if ( count <= 0)         break;       tmptr++;      }       fprintf(fp, \"\ ______________________________________________________\");      fprintf(fp, \"\ \\t\\t\\t    Total Amount : %5d\", total_amt);      printf(\"\ ______________________________________________________\");      printf(\"\ \\t\\t\\t    Total Amount : %5d\", total_amt);   }     void getWriteFileName(char *fname)    {      printf(\"Enter Output File name maxium 14 character : \");      scanf(\"%s\", fname);       if( ( fp = fopen(fname, \"wt\") ) == NULL  )      {  fclose(fp);     printf(\"\ Invalid file name entered.\");      }      else     entryData();   }     void getReadFileName(char *fname)    {      printf(\"Enter Input File name maxium 14 character : \");      scanf(\"%s\", fname);       if( ( fp = fopen(fname, \"r+t\") ) == NULL  )      {  fclose(fp);     printf(\"\ Invalid file name entered.\");      }    }     void readFile()    {      char chr;      while( feof(fp) == 0)      {      chr = getc(fp);      printf(\"%c\",chr);      }    }     void getName(char *str)     {     int count1=0;     char *getstr;     char readch=\'\\0\';     int errorflag = 0;         fflush(NULL);        getstr = str;         while(1)        {         scanf(\"%c\", &readch);         if( readch == \'\ \')            break;          *getstr = readch;          count1++;         getstr++;         if( count1 >= 20 )           break;        }        fflush(NULL);         if(errorflag)           getName(str);         *getstr=\'\\0\';     }   void getzeroInteger(char *_chr, int *_value)  {    float tempval =1;    int _ival=0;      printf(\"\ %s\", _chr);     _scaint = scanf(\"%f\", &tempval);     fflush(NULL);      if ( _scaint != 0 )    {      _ival = tempval;       if ( tempval < 0 )      {       printf(\"%s\", \"\ You should enter value greater then or equal to zero. Enter the value again...\");       getzeroInteger(_chr, _value);      }       elseif ( _ival != tempval)      {       printf(\"%s\", \"\ Error(decimal value). It will be truncated the digit after the percision. Enter integer number only.\");       getzeroInteger(_chr, _value);      }      elseif( ! ( (tempval >= -32768 ) && (tempval <= 32767 )  ) )      {       printf(\"%s\", \"\ Error out of range entry. You should enter integer value in the range of -32768 to 327678 only.\");       getzeroInteger(_chr, _value);      }      else      {       *_value = (int) tempval;      }    }   else      {     printf(\"\ %s\",\"Error in entry. Enter integers only.\");     getzeroInteger(_chr, _value);      }  }  
 
    
  Solution
#include
