Я пишу программу проверки орфографии, которая будет сравнивать текстовый файл пользователя со словарем, чтобы узнать, находятся ли слова, которые они ввели, в словаре. Если нет, выводится сообщение об ошибке, чтобы сообщить пользователю, что конкретное слово неверно. Я пробовал несколько вариантов кода ниже, но не получал желаемых результатов. Это что-то во вложенном цикле, которое его выбрасывает. Этот код находится на черновом этапе, я должен сделать его более эффективным с точки зрения памяти и т. Д. И убрать его. Я просто заинтересован в том, чтобы он работал первым. Благодаря!Сравнение двух текстовых файлов - программа проверки орфографии в C
EDIT: изменили код немного в соответствии с приведенными ниже советами. Теперь он читает первое слово и говорит, что он находится в словаре. Затем он отображает второе слово, но цикл сканирования словаря не запускается и программа зависает. Я знаю, что его вложенный цикл, вызывающий проблему, я просто не могу обойти его!
/*Spellcheck program*/
/*Author: */
#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 dictcount = 0;
fp1 = fopen("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//
}
printf("%s", wordcheck);
while(dictcount >= 0)//reads dictionary word into array//
{
dictcount = 0;
fscanf(fp1,"%s", worddict);
if(strcmp(wordcheck, worddict)==0)//compare strings//
{
printf("This word: %s is in the dictionary\n", wordcheck);
break;
}
else
{
dictcount++;
}
if(worddict == NULL)
{
printf("Your word: %s is not in the dictionary\n", wordcheck);
}
}
dictcount++;
}
fclose(fp1);
fclose(fp2);
return 0;
}
Пожалуйста, не закрывайте. У этого парня талант. – wildplasser
Спасибо за вход wildplasser. Я получаю то, что вы говорите повторно, а не сканирование до конца файла, но у меня есть разрыв под истинным strcmp. Будет ли этого недостаточно, чтобы остановить сканирование в EOF? – adohertyd
А, я вижу. Хорошая причина для перемещения второго блока 'strcmp()' где-то в другом месте. – wildplasser