I am writing a spellchecker program and have some issues. First thing is that I need to make better use of the memory. My code iterates through a large dictionary file repeatedly. I know its better to read this into memory first then iterate through the block but I really don't know how. The search should be optimized. The other problem is ignoring the non alphanumerical characters in the problem. Would really appreciate some help with this.

Code:
#include <stdio.h>#include <string.h>
#include <stdlib.h>


int main(void)
{
/*Open files and test that they open*/
FILE *fp1;
FILE *fp2;
char fname[20];
char wordcheck[45];/*The longest word in the English Language is 45 letters long*/
char worddict[45];
char dummy;
int i;
int notfound;


fp1 = fopen("C:/Users/Aaron/ProgrammingAssignment/dictionary.txt","r");


if (fp1 == NULL)
{
printf("The dictionary file did not open.");
exit(0);
}


printf("Please enter the path of the file you wish to check:\n");
scanf("%s", fname);
scanf("%c", &dummy);


fp2 = fopen(fname, "r");
	if (fp2 == NULL)
		{
		printf("Your file did not open, please check your filepath and try again.\n");
	
		printf("Please enter path of file you wish to check: \n");
		scanf("%20s",fname);
	
		fp2 = fopen(fname, "r");
		}
	
	else
		{
		printf("Your file opened correctly\n");
		}


/*When files are open, read each word from the text file into an array:*/
	
	while(fscanf(fp2,"%s", wordcheck)!=EOF)//Reads word from text file into array//
	{


		for (i=0; wordcheck[i]; i++)
		{
			wordcheck[i] = tolower(wordcheck[i]);//makes all characters lower case//
		}
			fseek(fp1,0,SEEK_SET);


		/*printf("%s", wordcheck);//debugger*/
		
			while(fscanf(fp1,"%s", worddict)!=EOF)
			{	
				notfound = 1;
				
				if(strcmp(wordcheck, worddict)==0)//compare strings//
				{
				printf("This word: %s is in the dictionary\n", wordcheck);//debugger//
				notfound = 0;
				break;
				}
			}
			if(notfound == 1)
				{
				printf("%s is not in dictionary\n", wordcheck);
				}
	}
	printf("Your file has been checked. Please check any errors found");
	fclose(fp1);
	fclose(fp2);
			
return 0;

}