Hello All,
So i've revised my code quite a bit, trying to make it more efficient. I think i'm on the right track. One issue i'm having is on line 33, i'm getting an error saying too few arguments. any ideas how to fix this as i'm not sure.
Code:
do //reading file
{
fscanf(fp, "%s %s %s %d", fandlname, street, cityandstate, zip);
ptr[ptrct] = createaddress(fandlname, street, cityandstate, zip);
ptrct++;
} while (((fgets(fp)) != EOF)); /*ERROR IS HERE for "FP"*/
Here's all of my revised code. Any help, tips or pointers would be appreciated. One issue i'm wondering is how my code knows where my input.txt file is and also where to put my output.txt file. Errors have prevented me from running it successfully but i'm wondering.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct storeaddress
{
char fandlname[50];
char street[50];
char cityandstate[25];
int zip;
};
struct storeaddress*createaddress();
void printaddr(int ptrct, struct storeaddress*ptr[]);
void sortingzip(int ptrct, struct storeaddress*ptr[]);
int main()
{
struct storeaddress *ptr[50];
int ptrct = 0;
char buf[50];
FILE *fp;
char fandlname[50];
char street[50];
char cityandstate[25];
int zip;
fflush(stdin);
fp = fopen("input.txt", "r");
do //reading file
{
fscanf(fp, "%s %s %s %d", fandlname, street, cityandstate, zip);
ptr[ptrct] = createaddress(fandlname, street, cityandstate, zip);
ptrct++;
} while (((fgets(fp)) != EOF));
fflush(stdin);
sortingzip(ptrct, ptr);
printaddr(ptrct, ptr);
return 0;
free(ptr);
}
struct storeaddress*createaddress(char fandlname[50], char street[50], char cityandstate[50], int zip)
{
fflush(stdin);
struct storeaddress *newaddress = (struct storeaddress*)malloc(sizeof(struct storeaddress));
//creating struct with parametres sent while file reading
strcpy(newaddress->fandlname, fandlname);
strcpy(newaddress->street, street);
strcpy(newaddress->cityandstate, cityandstate);
newaddress->zip = zip;
return newaddress;
}
void printaddr(int ptrct, struct storeaddress *ptr[50])
{
int j;
fflush(stdin);
FILE *outputFile = fopen("output.txt", "w");
for (j = 0; j < ptrct; j++)
{
printf("\n%s%s%s%d", ptr[j]->fandlname, ptr[j]->street, ptr[j]->cityandstate, ptr[j]->zip);
//writing to a file
fprintf(outputFile, "\n%s%s%s%d", ptr[j]->fandlname, ptr[j]->street, ptr[j]->cityandstate, ptr[j]->zip);
}
};
void sortingzip(int ptrct, struct storeaddress *ptr[])
{
int i, k;
for (i = 0; i < ptrct; i++)
{
for (k = 0; k < ptrct; k++)
{
if (ptr[k]->zip > ptr[i]->zip)
{
struct storeaddress *temp = ptr[i];
ptr[i] = ptr[k];
ptr[k] = temp;
}
}
}
}