Hello, This is a C program that i just need someone to comment and explain what
ID: 3797682 • Letter: H
Question
Hello,
This is a C program that i just need someone to comment and explain what is happening with each funtcion so i can understand what is going on. For example i dont know what the function LOAD file is doing. Also what is fgets and rewind . Please be thorough in your explanation . Thank you
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct _data {
char *name;
long number;
};
int SCAN(FILE *(*stream)) {
int lines = 0;
(*stream) = fopen("home/zeze/info.txt","r"); // read mode
if( (*stream) == NULL )
{
perror("Error while opening the file. ");
return 0;
}
while(!feof((*stream)))
{
int ch = fgetc((*stream));
if(ch == ' ')
{
lines++;
}
}
rewind(*stream);
return lines;
}
struct _data *LOAD(FILE *stream, int size){
char line[256] = {''};
struct _data * items = (struct _data *)malloc(size*(sizeof(struct _data)));
int index = 0;;
while (fgets(line, sizeof(line), stream) != NULL){
index++;
if(index == size){
break;
}
//Break each line by spaces
char * name = strtok(line," ");
//get name
int nameLenght = strlen(name);
struct _data * item = (items + index);
item->name = (char *) malloc(nameLenght+1);
memset(item->name,'',nameLenght+1);
strcpy(item->name,name);
//get number
item->number = atol(line+nameLenght+1);
}
return items;
}
void SEARCH(struct _data *BlackBox, char *name, int size) {
int i=0;
for(i ; i < size ; i++){
if( strcmp( (BlackBox + i)->name,name) == 0){
printf("he name was found at the %d entry.", (i+1));
return;
}
}
printf("The name was NOT found.");
}
void FREE(struct _data *BlackBox, int size) {
int i=0;
for(i; i < size ; i++){
struct _data * item = (BlackBox + i);
//Free Name String
free (item->name);
//Free item
free(item);
}
}
int main(int argc, char *argv[])
{
if(argc ==0){
printf("* You must include a name to search for. *");
return 0;
}
FILE * fp;
SCAN(&fp);
struct _data * items = LOAD(fp,4);
SEARCH(items,argv[0],4);
FREE(items,4);
return 0;
}
Explanation / Answer
struct _data *LOAD(FILE *stream, int size-This structure loads,reads data and returns item position.
void SEARCH(struct _data *BlackBox, char *name, int size) - is conducting name search received through command line arguments, after comparing string name from the file, it reports the searched string position in the file.
void FREE(struct _data *BlackBox, int size) shall free the memory space occupied by the item names.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.