Code:
#include <stdio.h>
#include <stdlib.h>
struct nodedef{
struct nodedef *ptrL;
struct nodedef *ptrD;
struct nodedef *ptrU;
struct nodedef *ptrR;
int numb;
};
typedef struct nodedef node;
void null_node(node *);
node *gridlist(void);
node *triangle(void);
node *half(void);
main()
{
int choice=0,k;
do{
printf("\nMenu\n\n");
printf("1. Option 1 : Grid\n");
printf("2. Option 2 : Triangle\n");
printf("3. Option 3 : Half grid\n");
printf("9. Exit\n\n");
do{
fflush(stdin);
k=scanf("%d", &choice);
if(k!=1){ printf("\nInvalid input.\n") ;
}
}while(k!=1);
switch(choice){
case 1:printf("Placeholder 1");
gridlist();
break;
case 2:printf("Placeholder 2");
triangle();
break;
case 3:printf("Placeholder 3");
half();
break;
case 9:printf("Stopping program.\n");
getch();
return 0;
default: printf("Please choose again.");
}
}while(choice!=9);
}
node *gridlist(void){
node *start, *currV, *prevV, *currH, *prevH, *next;
int i,j,columns,rows;
printf("Please specify how many rows and colums you'd like in the Grid option");
scanf("%d%d",&rows,&columns);
start=(node *)malloc(sizeof(node));
null_node(start);
currV=start;
prevV=start;
currH=start;
prevH=start;
printf("Please type in your number\n");
scanf("%d", &currV->numb);
//creating the first row first
for(i=0;i<columns-1;i++){
currH->ptrR=(node *)malloc(sizeof(node));
prevH=currH;
currH=currH->ptrR;
null_node(currH);
currH->ptrL=prevH;
printf("Please type in your number\n");
scanf("%d", &currH->numb);
}
//creating the rest of the structure one pointer that stays one row behind the current horizontal traversing through the rows;
printf("\nTEST\n");
for(i=0;i<rows-1;i++){
next=currV;
currV->ptrD=(node *)malloc(sizeof(node));
prevV=currV;
currV=currV->ptrD;
null_node(currV);
currV->ptrU=prevV;
printf("Please type in your number\n");
scanf("%d", &currV->numb);
currH=currV;
prevH=currV;
printf("\nTEST\n");
for(j=0;j<columns-1;j++){
currH->ptrR=(node *)malloc(sizeof(node));
prevH=currH;
currH=currH->ptrR;
null_node(currH);
currH->ptrL=prevH;
next=next->ptrR;
next->ptrD=currH;
currH->ptrU=next;
printf("Please type in your number\n");
scanf("%d", &currH->numb);
}
}
printf("\nCurrH %p %p %p %d\n",currH,currH->ptrR,currH->ptrL,currH->numb);
printf("\nCurrV %p %p %d\n",currV,currV->ptrL,currV->numb);
return;
}
void null_node(node *curr){
curr->ptrL=NULL;
curr->ptrU=NULL;
curr->ptrD=NULL;
curr->ptrR=NULL;
return;
}
node *triangle(void){
node *start, *currH, *prevH, *prevV, *currV, *next;
int i,j,k,rowcount=1,rows;
printf("Please specify how many rows you'd like in the Triangle option\n");
scanf("%d",&rows);
start=(node*)malloc(sizeof(node));
null_node(start);
currV=start;
prevV=start;
printf("Please type in your number\n");
scanf("%d", &currV->numb);
for(i=0;i<rows-1;i++){
currV->ptrD=(node *)malloc(sizeof(node));
prevV=currV;
currV=currV->ptrD;
null_node(currV);
currV->ptrU=prevV;
printf("Please type in your number\n");
scanf("%d", &currV->numb);
next=prevV;
printf("\nTEST\n");
//left side loop
for(j=0;j<rowcount;j++){
printf("\nTEST2\n");
currH=currV;
prevH=currV;
printf("\nTEST2\n");
currH->ptrL=(node *)(sizeof(node));
printf("\nTEST2\n");
prevH=currH;
currH=currH->ptrL;
printf("\nTEST3\n");
currH->ptrL=NULL; //crashes here
currH->ptrU=NULL;
currH->ptrD=NULL;
currH->ptrR=NULL;
printf("\nTEST5\n");
currH->ptrR=prevH;
next=next->ptrL;
next->ptrD=currH;
currH->ptrU=next;
printf("\nTEST3\n");
printf("Please type in your number\n");
scanf("%d", &currH->numb);
}
//resetting next to prevV for the right side loop
//right side loop;
printf("TEST\n");
next=prevV;
for(k=0;k<rowcount;k++){
currH=currV;
prevH=currV;
currH->ptrR=(node *)(sizeof(node));
prevH=currH;
currH=currH->ptrR;
null_node(currH);
currH->ptrL=prevH;
next=next->ptrR;
next->ptrD=currH;
currH->ptrU=next;
printf("Please type in your number\n");
scanf("%d", &currH->numb);
}
rowcount++;
}
}
node *half(void){
node *start, *currH, *prevH, *prevV, *currV, *next;
int i,j,k,rowcount=1,rows;
printf("Please specify how many rows you'd like in the Triangle option\n");
scanf("%d",&rows);
start=(node*)malloc(sizeof(node));
null_node(start);
currV=start;
prevV=start;
printf("Please type in your number\n");
scanf("%d", &currV->numb);
for(i=0;i<rows-1;i++){
currV->ptrD=(node *)malloc(sizeof(node));
prevV=currV;
currV=currV->ptrD;
null_node(currV);
currV->ptrU=prevV;
printf("Please type in your number\n");
scanf("%d", &currV->numb);
next=prevV;
printf("\nTEST\n");
//right side loop
for(k=0;k<rowcount;k++){
currH=currV;
prevH=currV;
currH->ptrR=(node *)(sizeof(node));
prevH=currH;
currH=currH->ptrR;
null_node(currH);
currH->ptrL=prevH;
next=next->ptrR;
next->ptrD=currH;
currH->ptrU=next;
printf("Please type in your number\n");
scanf("%d", &currH->numb);
}
rowcount++;
}
}