what is the error in this coding can some one fix it for me please #include <std
ID: 3775455 • Letter: W
Question
what is the error in this coding can some one fix it for me please #include <stdio.h> #include <conio.h> #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, " Total Amount : %5d", total_amt); printf(" ______________________________________________________"); printf(" 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=''; 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=''; } 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); } }
Explanation / Answer
#include <stdio.h>
#include <conio.h>
#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();
}
else if( 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, " Total Amount : %5d", total_amt);
printf(" ______________________________________________________");
printf(" 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='';
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='';
}
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);
}
else if ( _ival != tempval)
{
printf("%s", " Error(decimal value). It will be truncated the digit after the percision. Enter integer number only.");
getzeroInteger(_chr, _value);
}
else if( ! ( (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);
}
}
Note: some of things are fixed, but valid.c file is not available
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.