I am trying to print a linked list, it is acting strangely, when it is suppose to move to the next item it will not, for instance the first item printed is "Granny Smith" and then the rest in the struct, when it goes to the next line what should be a new food is "ranny Smith" Always without the G, and most of the other details are corrupted or gibberish. Any help would be greatly appreciated.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define cls system("cls");
#define flush fflush(stdin)
#define pause system("pause");
struct food // Declaration of struct
{
char produce[20];
char type[20];
char soldBy[20];
float price;
int quantityInStock;
struct food *next;
};
void addPres(struct food** tip, char tokenPro[20], char tokenType[20], char tokenSold[20], float tokenFloat, int tokenInt);
void display ();
void displayMenu ();
int getChoice ();
void readDataIn();
int main()
{
int choice = 0;
int ;
struct food first;
char *saveFloat, *saveInt;
char tokenPro[20], tokenType[20], tokenSold[20], savePro[20], saveType[20], saveSold[20], j[1900];
float tokenFloat, messFloat;
int danint, tokenInt;
struct food* a = NULL;
FILE* file;
a = NULL; // sets the first item on the list to empty
//readDataIn();
do
{
choice = getChoice();//function to present choices and receive an answer
switch (choice)//switch routes the choice
{
case 1: //to enter a new node on the list
cls;
printf("Enter the produce type: ");
fgets(tokenPro, 20, stdin);
printf("Enter the type: ");
fgets(tokenType, 20, stdin);
printf("Enter the units of measurement: ");
fgets(tokenSold, 20, stdin);
printf("\nEnter the price per %s: ", &tokenSold);
scanf("%f", &tokenFloat );
printf("\nEnter the quantity in stock: ");
scanf("%i", &tokenInt );
//pause;
addPres(&a, tokenPro, tokenType, tokenSold, tokenFloat, tokenInt);
break;
case 2: //to display the linked list
display(a);
break;
case 3: //to reverse the order
if((file=fopen("AssignmentTwoInput.txt", "r")) != NULL) //opens files
{
while(fgets(j, sizeof(j), file)) //while information is being sent to j from the file
{
strcpy(savePro, strtok(j, ","));
strcpy(saveType, strtok(NULL, ","));
strcpy(saveSold, strtok(NULL, ","));
saveFloat = strtok(NULL, ",");
saveInt = strtok(NULL, "\n");
messFloat = atof(saveFloat); //ID number is assigned to token2
danint = atoi(saveInt); //converts the value token2 points to into an int (previously read in as an string)
addPres(&a, savePro, saveType, saveSold, messFloat, danint); //sends the name and ID to the function to add a person
//printf("\n %s \t %s \t %s \t %f \t %i", savePro, saveType, saveSold, messFloat, danint);
//pause;
}//end while loop
}//end if loop
printf("\nSuccessfully loaded input file\n\n\n"); //message to tell user the back was found and imported successfully
pause;
fclose(file);
break;
case 4: //to export data
break;
case 5: //option to exit
exit(0);
break;
default://error checking
printf("Please enter a valid choice.\n");
break;
}//switch loop close
}
while (choice != 5); //end menu choices
return 0;
}//end main
void addPres(struct food** tip, char tokenPro[20], char tokenType[20], char tokenSold[20], float tokenFloat, int tokenInt)
{
struct food* temp =
(struct food*) malloc(sizeof(struct food));
strcpy(temp->produce, tokenPro);
strcpy(temp->type, tokenType);
strcpy(temp->soldBy, tokenSold);
temp->price = tokenFloat;
temp->quantityInStock = tokenInt;
//printf("\n %s \t %s \t %s \t %f \t %i", temp->produce, temp->type, temp->soldBy, temp->price, temp->quantityInStock);
//pause;
if (tip == NULL) //if the tip node is empty
{
tip = temp; //tip node becomes this node
(*tip)->next = NULL; // since there are no others yet the next node will be empty
}
else
{
temp->next = tip; // reassigns the tip node to the next one
(*tip) = temp; //inserts current node as the tip
}
}
void display(struct food* c)
{
//c = first; //assigns c to the first node on the linked list
int count = 1;
struct food *temp;
temp = c;
cls;
printf("==========================================================================\n"); //prints a header to say which info is which
printf(" Item # Produce Type Sold By Price In Stock\n");
printf("==========================================================================\n");
while( c != NULL)
{
printf("%3i \t", count);
printf("%s \t", c->produce ); //prints name
printf("%s \t", c->type ); //prints name
printf("%s \t", c->soldBy); //prints name
printf("%-3.2f \t", c->price); //prints ID
printf("%i\n", c->quantityInStock); //prints ID
pause;
count = count + 1;
c = c->next; //advances to next item in the linked list
if(c == NULL)
{
printf("\n end \n"); //once end is found user is told
pause;
}
}
printf("\n done \n");
pause;
}//end display
Aucun commentaire:
Enregistrer un commentaire