Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

hi, Below is a C file. It is compiling fine but Can anyone tell me how I am able

ID: 3636093 • Letter: H

Question

hi,

Below is a C file. It is compiling fine but Can anyone tell me how I am able to see the output. I have this file in secure shell (Linux environment) as well as in DEV C++.

I want to see what out put does it provide.


//Leegia Jacob
// CS 367
// LAb 2 - Dynamic Allocation in C

#include <stdlib.h>
#include <stdio.h>

#define VISITED 1
#define UNVISITED 0

#define ON 1
#define OFF 0
//struct node
//each node contains a list of neighbors
struct Node {
int number;
struct Node * next;
int visited;
struct Neighbors *neighborhead;
};

struct Neighbors
{
struct Node *neighbor;
struct Neighbors *nextNeighbor;
};

typedef struct Node node;
typedef struct Neighbors neigh;
void readInput();
int createNodes(char *line, int *nodeCount);
void traverseNodes(char *line);
void linkNeighbors(int node1, int node2);
void startNodewithTTL(int startNode, int TTL);
node* findNode(int nodeNum);
node *headNode = NULL;

int main()
{
readInput();
node * tempNode = headNode;
while(tempNode != NULL)
{

neigh * tempNeigh = tempNode->neighborhead ;
while(tempNeigh != NULL)
{


tempNeigh = tempNeigh->nextNeighbor;
}

tempNode = tempNode->next;
}


return 0;
}
//read the input and parse line
void readInput()
{
int inputNodes = OFF;
int ttlSet = OFF;
int nodeCount;
char *line = (char *)malloc(sizeof(char)*100); //will need to be freed later
FILE *st = fopen("input.txt","r");
if(st == NULL)
{
exit(1);
}
while (!feof(st))
{

if(inputNodes == OFF && ttlSet == OFF)
{
nodeCount = atoi(line);
if(nodeCount > 0)
{
inputNodes = ON;
}
}
else if(inputNodes == ON && ttlSet == OFF)
{
while(createNodes(line,&nodeCount));
if(nodeCount == 0)
{
inputNodes = OFF;
ttlSet = ON;

}
}
else
{
traverseNodes(line);
ttlSet = OFF;
}
if (fgets(line, 100, st) == NULL)
{
break;
}
}
fclose(st);
}
//traverse each start node for the given TTL
void traverseNodes(char *line)
{
char *tempNum = (char *)malloc(sizeof(char)*10); //will need to be freed later
int tempNumber;
int oldNumber;
int spaceCount = 0;
int x = 0;
int loadNodes = OFF;
int visitCount = 0;
int unreachable = 0;
node * tempNode;
do
{
if(*line == 32)
{

tempNumber = atoi(tempNum);
if(tempNumber == 0)
{
spaceCount++;


}
else
{
spaceCount = 0;

if(loadNodes==ON)
{
visitCount++;
startNodewithTTL(oldNumber,tempNumber);
//bring the thing from main here
tempNode = headNode;
while(tempNode != NULL)
{
if(tempNode->visited == UNVISITED)
{
unreachable++;
}
tempNode = tempNode->next;
}

printf("%d - %d not reachable from Node %d with TTL = %d ",visitCount,unreachable,oldNumber,tempNumber);
tempNode = headNode;
while(tempNode != NULL)
{
tempNode->visited = UNVISITED;
tempNode = tempNode->next;
}
unreachable = 0;
loadNodes = OFF;
}
else
{
oldNumber = tempNumber;
loadNodes = ON;
}
}

for(x = 0; x < 10; x++)
{
*(tempNum+x) = '';
}
x = 0;
}
else
{
*(tempNum+x) = *line;
x++;
}
if(!(*(line+1) > 31 && *(line+1) < 58))
{
tempNumber = atoi(tempNum);
if(loadNodes==ON)
{
startNodewithTTL(oldNumber,tempNumber);
//reset visited
//bring the thing from main here
tempNode = headNode;
while(tempNode != NULL)
{
if(tempNode->visited == UNVISITED)
{
unreachable++;
}
tempNode = tempNode->next;
}
printf("%d - %d not reachable from Node %d with TTL = %d",visitCount,unreachable,oldNumber,tempNumber);
tempNode = headNode;
while(tempNode != NULL)
{
tempNode->visited = UNVISITED;
tempNode = tempNode->next;
}
unreachable = 0;
loadNodes = OFF;
}
else
{
oldNumber = tempNumber;
loadNodes = ON;
}

}
//this means 2 0s have been found. deallocate all memory and reset variables
//for input of possibly more data
if(spaceCount == 2)
{

return;
}
line++;
}while(*line > 31 && *line < 58);

return;

}
//create nodes by parsing line until nodeCount = 0
int createNodes(char *line,int* nodeCount)
{
char *tempNum = (char *)malloc(sizeof(char)*10); //will need to be freed later
int tempNumber;
int oldNumber;
int spaceCount = 0;
int x = 0;
int loadNodes = OFF;

do
{

if(*line == 32)
{

tempNumber = atoi(tempNum);
if(tempNumber == 0)
{
spaceCount++;
*nodeCount = (*nodeCount)-1;
}
else
{
spaceCount = 0;
if(loadNodes==ON)
{
linkNeighbors(oldNumber,tempNumber);
loadNodes = OFF;
}
else
{
oldNumber = tempNumber;
loadNodes = ON;
}

}

for(x = 0; x < 10; x++)
{
*(tempNum+x) = '';
}
x = 0;
}
else
{
*(tempNum+x) = *line;
x++;
}
if(!(*(line+1) > 31 && *(line+1) < 58))
{

*nodeCount = (*nodeCount)-1;
tempNumber = atoi(tempNum);
if(loadNodes==ON)
{
linkNeighbors(oldNumber,tempNumber);
loadNodes = OFF;
}
else
{
oldNumber = tempNumber;
loadNodes = ON;
}
}
if(*nodeCount == 0)
{
return 0;
}
line++;
}while(*line > 31 && *line < 58);

return 0;

}
//first search node list to see if the nodes already exist
//if not, create the nodes and the neighbors link
void linkNeighbors(int node1, int node2)
{
node *tempNode, *tempNode2;
neigh *tempNeighbor, *tempNeighbor2;

if(headNode == NULL)
{
headNode = (node *)malloc(sizeof(node));
headNode->number = node1;
headNode->visited = UNVISITED;

tempNode = (node *)malloc(sizeof(node));
tempNode->number = node2;
tempNode->visited = UNVISITED;

headNode->next = tempNode;
headNode->neighborhead = (neigh *)malloc(sizeof(neigh));
headNode->neighborhead->neighbor = tempNode;

tempNode->neighborhead = (neigh *)malloc(sizeof(neigh));
tempNode->neighborhead->neighbor = headNode;

}
else
{

tempNode = findNode(node1);
tempNode2 = findNode(node2);
//create just tempnode2
if(tempNode != NULL && tempNode2 == NULL)
{

//make tempNode2
tempNode2 = (node *)malloc(sizeof(node));
tempNode2->number = node2;
tempNode2->visited = UNVISITED;

//put it in list
node * t = headNode;
while(t->next != NULL)
{
t = t->next;
}
t->next = tempNode2;

//add neighbor tempNode
tempNode2->neighborhead = (neigh *)malloc(sizeof(neigh));
tempNode2->neighborhead->neighbor = tempNode;
//add neighbor tempNode2
tempNeighbor = tempNode->neighborhead;
while(tempNeighbor->nextNeighbor != NULL)
{
tempNeighbor = tempNeighbor->nextNeighbor;
}
tempNeighbor->nextNeighbor = (neigh *)malloc(sizeof(neigh));
tempNeighbor->nextNeighbor->neighbor = tempNode2;
}
else if(tempNode == NULL && tempNode2 != NULL)
{
//make tempNode
tempNode = (node *)malloc(sizeof(node));
tempNode->number = node1;
tempNode->visited = UNVISITED;

//put it in list
node * t = headNode;
while(t->next != NULL)
{
t = t->next;
}
t->next = tempNode;

//add neighbor tempNode2
tempNode->neighborhead = (neigh *)malloc(sizeof(neigh));
tempNode->neighborhead->neighbor = tempNode2;
//add neighbor tempNode
tempNeighbor = tempNode2->neighborhead;
while(tempNeighbor->nextNeighbor != NULL)
{
tempNeighbor = tempNeighbor->nextNeighbor;
}
tempNeighbor->nextNeighbor = (neigh *)malloc(sizeof(neigh));
tempNeighbor->nextNeighbor->neighbor = tempNode;

}
else if(tempNode == NULL && tempNode2 == NULL)
{
//create tempNode and tempnode2
tempNode = (node *)malloc(sizeof(node));
tempNode->number = node1;
tempNode->visited = UNVISITED;
node * t = headNode;
while(t->next != NULL)
{
t = t->next;
}
t->next = tempNode;
tempNeighbor = tempNode->neighborhead;
while(tempNeighbor->nextNeighbor != NULL)
{
tempNeighbor = tempNeighbor->nextNeighbor;
}
tempNeighbor->nextNeighbor = (neigh *)malloc(sizeof(neigh));
tempNeighbor->nextNeighbor->neighbor = tempNode2;

t= headNode;
tempNode2 = (node *)malloc(sizeof(node));
tempNode2->number = node2;
tempNode2->visited = UNVISITED;
while(t->next != NULL)
{
t = t->next;
}
t->next = tempNode2;
tempNeighbor2 = tempNode2->neighborhead;
while(tempNeighbor2->nextNeighbor != NULL)
{
tempNeighbor2 = tempNeighbor2->nextNeighbor;
}
tempNeighbor2->nextNeighbor = (neigh *)malloc(sizeof(neigh));
tempNeighbor2->nextNeighbor->neighbor = tempNode;



}
else
{

//add neighbor tempNode
tempNeighbor = tempNode->neighborhead;
while(tempNeighbor->nextNeighbor != NULL)
{
tempNeighbor = tempNeighbor->nextNeighbor;
}
tempNeighbor->nextNeighbor = (neigh *)malloc(sizeof(neigh));
tempNeighbor->nextNeighbor->neighbor = tempNode2;
//add neighbor tempNode2
tempNeighbor2 = tempNode2->neighborhead;
while(tempNeighbor2->nextNeighbor != NULL)
{
tempNeighbor2 = tempNeighbor2->nextNeighbor;
}
tempNeighbor2->nextNeighbor = (neigh *)malloc(sizeof(neigh));
tempNeighbor2->nextNeighbor->neighbor = tempNode;
}

}

}
//fine a node given the number
node* findNode(int nodeNum)
{
node* tempNode = headNode;
while(tempNode != NULL)
{
if(tempNode->number == nodeNum)
{
return tempNode;
}
else
{
tempNode = tempNode->next;
}

}
return NULL;
}
//given the start node, traverse until TTL = 0
void startNodewithTTL(int startNode, int TTL)
{
node * t = findNode(startNode);
neigh * n = t->neighborhead;
t->visited = VISITED;
if(TTL != 0)
{

do
{
startNodewithTTL(n->neighbor->number,TTL-1);
n= n->nextNeighbor;
}while(n != NULL);
}

return;



}








Thanks FOr the help

Explanation / Answer

tempNode->neighborhead->neighbor = tempNode2; //add neighbor tempNode tempNeighbor = tempNode2->neighborhead; while(tempNeighbor->nextNeighbor != NULL) { tempNeighbor = tempNeighbor->nextNeighbor; } tempNeighbor->nextNeighbor = (neigh *)malloc(sizeof(neigh)); tempNeighbor->nextNeighbor->neighbor = tempNode; } else if(tempNode == NULL && tempNode2 == NULL) { //create tempNode and tempnode2 tempNode = (node *)malloc(sizeof(node)); tempNode->number = node1; tempNode->visited = UNVISITED; node * t = headNode; while(t->next != NULL) { t = t->next; } t->next = tempNode; tempNeighbor = tempNode->neighborhead; while(tempNeighbor->nextNeighbor != NULL) { tempNeighbor = tempNeighbor->nextNeighbor; } tempNeighbor->nextNeighbor = (neigh *)malloc(sizeof(neigh)); tempNeighbor->nextNeighbor->neighbor = tempNode2; t= headNode; tempNode2 = (node *)malloc(sizeof(node)); tempNode2->number = node2; tempNode2->visited = UNVISITED; while(t->next != NULL) { t = t->next; }