I have an assignment that calls for me to only use standard C. I am currently trying to take in input from a file using fopen() and then take in lines from the file using fgets(). The original problem was that fgets() quits taking in input after six lines. "Something" changed. Now it quits taking in input after four lines. I was wondering if someone could take a look at the code below and see if any solution comes to mind. Thanks in advance. The input for the program is as follows:
This is the file "params.txt"
infile=hbglobin.txt
left=GAAGTTCCTATWY
spacer=TTTCTAGA
csvfile=hbglobin_FRT-likes.csv
threshold=80
symmetry=yes
doublestranded=no
outfile=hbglobin_FRT-likes.txt
right=RWATAGGAACTTC
/*
* This is the Get Parameters Function. The goal of this function
* is take in parameters from a text file for the program to use.
* */
void getParam(char* paramfile)
{
printf("Getting Parameters NOW\n"); // A Print statement for debugging purposes
extern char *filein,*l,*s,*r,*ds,*sym,*fileout,*csvfileout,*sym,*ds;
extern int threshold;
int index;
char line[200];
char *name;
char *value;
char *tempname;
char *tempvalue;
tempvalue=(char*)malloc(sizeof(char));
tempname=(char*)malloc(sizeof(char));
name=(char*)malloc(sizeof(char));
value=(char*)malloc(sizeof(char));
FILE *paramsource;
paramsource = fopen("params.txt", "r");
if(paramsource==NULL)
{
printf("Error: can't open file.\n");
/* fclose(file); DON'T PASS A NULL POINTER TO fclose !! */
}
else
{
printf("File opened successfully\n");
while(fgets(line, max_line+1,paramsource)!=NULL)
{
printf("Beginning\n");//Print Statement for debugging purposes
index=indexofE(line);//This function call locates the index of the string where an equal sign is
strncpy(name,line,(index));//Creating substring "name" ( the left side of the "=" sign)
strncpy(value,line+(index+1),(strlen(line)));//Creating substring "value" (the right side of the "=" sign)
printf("Name is %s Value is %s\n",name,value);//Print statement for debugging purposes
if(strcmp(name,"infile")==0)
{
filein=malloc(sizeof(char));
strcpy(filein,value);
}
else if(strcmp(name,"left")==0)
{
strcpy(l,value);
}
else if(strcmp(name,"spacer")==0)
{
strcpy(s,value);
}
else if(strcmp(name,"right")==0)
{
strcpy(r,value);
}
else if(strcmp(name,"threshold")==0)
{
threshold=atoi(value);
}
else if(strcmp(name,"doublestranded")==0)
{
strcpy(ds,value);
}
else if(strcmp(name,"symmetry")==0)
{
strcpy(sym,value);
}
else if(strcmp(name,"outfile")==0)
{
fileout=(char*)malloc(strlen(value)*sizeof(char));
strcpy(fileout,value);
}
else if(strcmp(name,"csvfile")==0)
{
printf("Inside csvfile if statement\n");
csvfileout=(char*)malloc(strlen(value)*sizeof(char));
strcpy(csvfileout,value);
}
/*These are so name and value start fresh everytime and
* there are no remnants left over from the previous strings.
* */
memset(name,0,strlen(name));
memset(value,0,strlen(value));
}
printf("Left the while loop\n");//The print statement for debugging purposes
if ( strcmp(ds,"yes\n")==0||strcmp(ds,"Yes\n")==0||strcmp(ds,"yes")==0||strcmp(ds,"Yes")==0 )
{
doublestranded = 1;
}
else if ( strcmp(ds,"no\n")==0||strcmp(ds,"No\n")==0||strcmp(ds,"no")==0||strcmp(ds,"No")==0 )
{
doublestranded = 0;
}
else
{
printf("doublestranded doesn't look right...\n");
}
if (strcmp(sym,"yes\n")==0||strcmp(sym,"Yes\n")==0||strcmp(sym,"yes")==0||strcmp(sym,"Yes")==0)
{
symmetry = 1;
}
else if (strcmp(sym,"no\n")==0||strcmp(sym,"No\n")==0||strcmp(sym,"no")==0||strcmp(sym,"No")==0)
{
symmetry = 0;
}
else
{
printf("symmetry doesn't look right...\n");
}
printf("read parameters from %s\n",paramfile);
params = 1;
}
}