Hi guys. Can you look over my program and see what I have done wrong (lots of things I'm sure....). I never thought I would post my work here for safety reasons, but I am very lost so....
This is my text file:
51.41 52.07 52.01 51.22 50.44 49.97 Coal Diggers
77.26 78.33 78.29 78.12 77.09 75.74 Airplane Flyers
31.25 31.44 31.43 31.09 31.01 30.92 Oil Fracting and Pumping
2.03 2.02 2.04 2.00 1.98 1.97 Big Bank
44.21 44.32 44.29 43.98 43.82 43.71 Rail Container Shipping
93.21 93.11 93.02 93.31 92.98 92.89 Gold Bugs
Code:
#include <stdio.h>#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define NUM_PRICES 6
typedef struct
{
char *companyName;
double hourlyPrices[NUM_PRICES];
double avgPrice;
} COMPANYDATA;
typedef struct nodeTag
{
COMPANYDATA *pCompanyData;
struct nodeTag *link;
} NODE;
NODE* buildList(char* fileID);
bool getData (FILE* fpData, COMPANYDATA* pCompanyData);
bool searchList (NODE* pList, NODE** pPre, NODE** pCur, char* target);
NODE* insertNode(NODE* pList, NODE* pPre, COMPANYDATA item);
void printList(NODE* pList);
int main()
{
NODE* pList;
NODE* pPre;
NODE* pCur;
COMPANYDATA companyData;
pList = buildList("HW6.txt");
printList(pList);
}
NODE* buildList(char* fileID)
{
COMPANYDATA companyData;
NODE* pList;
NODE* pPre;
NODE* pCur;
FILE* fpData;
pList = NULL;
fpData = fopen(fileID, "r");
if(!fpData)
{
printf("Error opening file.");
exit (210);
}
while (getData (fpData, &companyData))
{
searchList(pList, &pPre, &pCur, companyData.companyName);
pList = insertNode (pList, pPre, companyData);
}
return pList;
}
bool getData (FILE* fpData, COMPANYDATA* pCompanyData)
{
char buffer[100];
while( (fscanf(fpData, "%lf %lf %lf %lf %lf %lf %[^\n]",
&pCompanyData->hourlyPrices[0], &pCompanyData->hourlyPrices[1],
&pCompanyData->hourlyPrices[2], &pCompanyData->hourlyPrices[3],
&pCompanyData->hourlyPrices[4], &pCompanyData->hourlyPrices[5],
buffer) != EOF ) )
{
pCompanyData->companyName=(char*)malloc( (strlen(buffer)+1) * sizeof(char) );
strcpy(pCompanyData->companyName, buffer);
return true;
}
return false;
}
bool searchList (NODE* pList, NODE** pPre, NODE** pCur, char* target)
{
bool found = false;
*pPre = NULL;
*pCur = pList;
while (*pCur != NULL && strcmp(target, (*pCur)->pCompanyData->companyName)>0)
{
*pPre = *pCur;
*pCur = (*pCur)->link;
}
if (*pCur && strcmp(target, (*pCur)->pCompanyData->companyName)==0)
found = true;
return found;
}
NODE* insertNode(NODE* pList, NODE* pPre, COMPANYDATA item)
{
NODE* pNew;
if(!(pNew = (NODE*)malloc(sizeof(NODE))))
{
printf("Memory overflow in insert.\n"),
exit(100);
}
while(pNew->pCompanyData = (COMPANYDATA*)malloc(sizeof(COMPANYDATA)));
pNew->pCompanyData = &item;
if (pPre == NULL)
{
pNew->link = pList;
pList = pNew;
}
else
{
pNew->link = pPre->link;
pPre->link = pNew;
}
return pList;
}
void printList(NODE* pList)
{
NODE* pWalker;
int i;
pWalker = pList;
while (pWalker)
{
for(i=0; i<NUM_PRICES; i++)
printf("%.2lf", pWalker->pCompanyData->hourlyPrices[i]);
printf("%s\n", pWalker->pCompanyData->companyName);
pWalker = pWalker->link;
}
}