The problem has something to do with my temp in the sort function. It says assignment from incompatible pointer type when i set "temp" = to something. It's a bubble sort. suggestions?
thank you,
brehon1104
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
//function protos
void addentry();
void delentry ();
void printentry ();
void sort ();
void random ();
void clear ();
void search ();
// struct for an entry
typedef struct
{
char *fname;
char *lname;
char *num;
} acontact;
acontact *ac; //pointer toward struct named "ac"
char first[100];
char last[100];
int counter = 0; // keeps tract of contacts
int i = 0; //printing index
// set eeverything to 0
main()
{
int choice = 0;
while (choice !=8)
{
printf("\n\nYellow Pages Editor v 1.06");
printf("\n1) Add entry");
printf("\n2) Delete entry");
printf("\n3) Display Yellow Pages");
printf("\n4) Sort entries");
printf("\n5) Find a number");
printf("\n6) Randomly select a friend");
printf("\n7) Erase phonebook");
printf("\n8) Exit");
printf("\n\nWhat do you want to do? ");
scanf("%d", &choice);
switch (choice) {
//add entry
case 1:
addentry();
system("\npause\n\n");
break;
//delete entry
case 2:
delentry();
system("\npause\n\n");
break;
//display
case 3:
printentry();
system("\npause\n\n");
break;
//sort
case 4:
sort();
system("\npause\n\n");
break;
//find a name given a number
case 5:
search();
system("\npause\n\n");
break;
//randomly select a friend
case 6:
random ();
system("\npause\n\n");
break;
// erase phonebook entirely
case 7:
clear ();
system("\npause\n\n");
break;
default:
printf("Try Again.");
break;
} //end switch
} // end while
} // end main
void addentry ()
{
if(counter == 0)
{
ac = (acontact *) malloc (sizeof(acontact) + (counter*20));
}
else
{
ac = (acontact *) realloc (ac, sizeof(acontact) + (counter*20) + 20);
}
if(ac == NULL)
{
printf("out of memory\n");
}
else
{
ac[counter].fname = (char *) malloc (sizeof(char)*15);
ac[counter].lname = (char *) malloc (sizeof(char)*15);
ac[counter].num = (char *) malloc (sizeof(char)*20);
printf("\nFirst name: ");
scanf("%s", ac[counter].fname);
printf("Last name: ");
scanf("%s", ac[counter].lname);
printf("Phone number (no dash): ");
scanf("%s", ac[counter].num);
counter++;
printf("Entry added to Yellow Pages!\n\n");
}
} //end add
void delentry ()
{
int i;
int removed = 0;
printf("\nFirst name: ");
scanf("%s", first);
printf("Last name: ");
scanf("%s", last);
// string comparison
for (i = 0; i<counter; i++)
{
if ((ac[i].fname == NULL) && (ac[i].lname == NULL)) continue;
if ((stricmp(ac[i].fname, first) == 0) && (stricmp(ac[i].lname, last) == 0))
{
ac[i].fname = NULL;
ac[i].lname = NULL;
ac[i].num = NULL;
removed = 1;
break;
}
if(removed == 1)
{
printf("\nUser Deleted!\n\n");
}
else
{
printf("\nUser not found!\n\n");
}
}
}// end del funct
void printentry ()
{
if (counter==0)
printf("Nothing to display.\n\n");
else
{
int i;
printf("\n\nYellow Page Entries:\n\n");
for(i=0; i<counter; i++)
{
if (ac[i].lname != NULL)
{
printf("%s %s %s\n", ac[i].fname, ac[i].lname, ac[i].num);
}// end if
} //end for
}// end else
} //end print
void sort ()
{
int i;
int j;
acontact *temp; // the problem is here
temp = (char *) malloc (sizeof(char)*15); // and here
int choice;
printf("Sort by:\n");
printf("1) First name\n");
printf("2) Last name\n");
printf("Which? ");
scanf("%d", choice);
switch (choice) {
case 1:
if (counter == 0)
printf("No entries to sort.");
else {
for (i = 0; i<counter; i++)
{
for (j = 0; j<counter; j++)
{
if ((stricmp(ac[j].fname, ac[i].fname)) > 0)
{
temp = ac[j].fname;
ac[j].fname = ac[i].fname;
ac[i].fname = temp;
}// end if
}// end inner for
}// end outer for
printf("Sorted");
}// else else
system("\npause\n\n");
break;
// if this doesnt work instead of j+1 make it i
case 2:
if (counter == 0)
printf("No entries to sort");
else {
for (i = 0; i< counter-1; i++)
{
for (j = 0; j < counter-1; j++)
{
if ((stricmp(ac[i].lname, ac[j].lname)) > 0)
{
temp = ac[j].lname;
ac[j].lname = ac[i].lname;
ac[i].lname = temp;
}// end if
}// end inner for
}// end outer for
}// else else
system("\npause\n\n");
break;
}// end switch
}// end sort funct
void random ()
{
int y;
if (counter == 0)
printf("No entries!");
else
{
y = rand()%counter;
printf("%s %s %s", ac[y].fname, ac[y].lname, ac[y].num);
}
}
void search ()
{
if (counter == 0)
printf("\nNo entries.\n\n");
else {
int g = 0;
char ifname[100];
char ilname[100];
printf("Enter the first name: ");
scanf("%s", ifname);
printf("Enter the last name: ");
scanf("%s", ilname);
for(g=0;g<counter;g++)
{
if ((stricmp(ac[i].fname, ifname) == 0 && (stricmp(ac[i].lname, ilname)) == 0))
printf("\n%s\n\n", ac[i].num);
}// end for
} // end else
} // end search func
void clear ()
{
if (counter ==0)
printf("\nNothing to erase\n");
else{
counter == 0;
free(ac);
}// end else
}// end clear