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; }
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.