Hey everyone, Ive been working on this all day and have made some good progress, however Im stuck again. Im working on the option of listing the messages by priority. However, no matter what priority I enter, it will only list the first message i enter.
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
struct MSG {
int priority;
int destination;
char *message;
int length;
struct MSG *nextPtr;
}*node, *t;
typedef struct MSG message;
void add(struct MSG **n, int priority1, int destination1, char *message1);
int main ()
{
struct MSG *temp;
int choice;
int num1, num2;
char text[MAX];
do
{
printf("1.) Quit\n");
printf("2.) Transmit next message\n");
printf("3.) List messages by priority\n");
printf("4.) Summarize message list\n");
printf("5.) Add new message\n");
printf(":");
scanf("%d", &choice);
switch(choice){
case 1:
return 0;
case 2:
//transmit next message
if (node==NULL)
{
printf("No messages left!\n");
break;
}
else
{
temp=node;
while(temp != NULL)
{
printf("%d", temp -> priority);
printf("%dn", temp -> destination);
char *loc=(char *) malloc (strlen(temp -> message));
strcpy(loc, temp -> message);
printf("%s", loc);
free(loc);
temp=temp -> nextPtr;
}
printf("test=%d %d %s\n", t-> priority, t-> destination, t-> message);
}
break;
case 3:
//list messages by priority
printf("Enter priority of the messages you would like to retrieve:\n");
scanf("%d", &pnum);
temp=node;
while(temp != NULL)
{
//printf("%d", temp -> priority);
//printf("%dn", temp -> destination);
char *loc=(char *) malloc (strlen(temp -> message));
strcpy(loc, temp -> message);
//printf("%s", loc);
free(loc);
temp=temp -> nextPtr;
if (t -> priority == pnum)
{
printf("%d %d %s\n", t -> priority, t -> destination, t -> message);
}
}
break;
case 4:
//summarize message list
break;
case 5:
//add new message
printf("Enter priority, destination and message:");
scanf("%d%d", &num1, &num2);
fgets(text, MAX, stdin);
add(&node, num1, num2, text);
break;
default:
printf("Invalid entry, please try again.\n");
break;
}
}while (choice <= 5);
return 0;
}
void add(struct MSG **n, int priority1, int destination1, char *message1)
{
struct MSG *temp, *node1;
if(*n==NULL)
{
temp=(struct MSG *) malloc (sizeof(struct MSG));
temp -> priority = priority1;
temp -> destination=destination1;
temp -> message=(char *) malloc (strlen(message1)+1);
strcpy(temp -> message, message1);
temp -> nextPtr=NULL;
*n=temp;
t=temp;
printf("test=%d %d %s\n", t->priority, t->destination, t->message);
}
else
{
temp=*n;
while(temp->nextPtr != NULL)
temp=temp -> nextPtr;
node1 = (struct MSG *) malloc(sizeof(struct MSG));
node1 -> priority=priority1;
node1 -> destination=destination1;
node1 -> message=(char*) malloc(strlen(message1)+1);
strcpy(node1 -> message, message1);
node1 -> nextPtr = NULL;
temp -> nextPtr = node1;
}
}