Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

/prague/ Q&A

Name: Anonymous 2013-11-19 12:18

Ask /prog/ anything.

Although don't expect an answer or even a good one.

Also, keep it /prog/ related.

Name: Anonymous 2013-11-24 3:19

>>22
Doushiou. I always lose the address of the malloc'd object somewhere in the program..
Fonbuk.c

#include <stdio.h>
#include <string.h>

typedef struct _record {
char *firstname;
char *lastname;
char *mobilenum;
struct _record *Next;
} Record;

void newentry(Record *Rec);
int insert(Record *Rec, char * lname, char * fname, char * mobile);
void viewall(Record *Rec);

int main()
{
char c;
Record *Phonebook = NULL;

while(1) {
printf("%s\n", "Phonebook: ");
printf("%s\n", "\t[1] Insert");
printf("%s\n", "\t[2] Display");
printf("%s\n", "\t[3] Exit");

do {
scanf("%c", &c);
} while (!((c == '1') || (c == '2') || (c == '3')));

switch (c) {
case '1':
newentry(Phonebook);
break;
case '2':
viewall(Phonebook);
break;
case '3':
return 0;
}
}
}

void newentry(Record *Rec)
{
char lname[30], fname[30], mobile[15];
int error;

clrscr();
printf("%s", "Last Name: ");
scanf("%s", &lname);
printf("%s", "First Name: ");
scanf("%s", &fname);
printf("%s", "Mobile No.: ");
scanf("%s", &mobile);
error = insert(Rec, lname, fname, mobile);
if (error > 0) {
printf("%s\n", "Not enough memory.");
getch();
}
}

int insert(Record *Rec, char * lname, char * fname, char * mobile)
{
/*
RETURN 0 IF SUCCESSFUL.
*/
Record *New, *Temp;
int i;

New = (Record *) malloc(sizeof (Record));

/* If malloc returns an invalid pointer */
if (!New) {
return 1;
}

/* Allocate memory for strings and
copy the arguments into them.
*/
New->lastname = (char *) malloc(strlen(lname) + 1);
strcpy(New->lastname, lname);
printf("%s", New->lastname);
New->firstname = (char *) malloc(strlen(fname) + 1);
strcpy(New->firstname, fname);
New->mobilenum = (char *) malloc(strlen(mobile) + 1);
strcpy(New->lastname, mobile);
New->Next = NULL;

/* If malloc returns an invalid pointer on the strings.*/
i = !(New->lastname) || !(New->firstname) || !(New->mobilenum);
if (i) {
return 1;
}

if (Rec == NULL) {
Rec = New;
} else {
Temp = Rec;
while (Temp->Next != NULL) {
Temp = Temp->Next;
}
Temp->Next = New;
}

return 0;
}

void viewall(Record *Rec)
{
Record *Temp;

clrscr();
printf("%s\t\t", "Last Name");
printf("%s\t\t", "First Name");
printf("%s\n", "Mobile Number");
Temp = Rec;
while (Temp->Next != NULL) {
printf("%s\t\t", Temp->lastname);
printf("%s\t\t", Temp->firstname);
printf("%s\n", Temp->mobilenum);
Temp = Temp->Next;
}
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List