Сравните два текстовых файла - программа для проверки орфографии в C - PullRequest
0 голосов
/ 15 декабря 2011

Я пишу программу для проверки орфографии, которая сравнивает текстовый файл пользователя со словарем, чтобы узнать, есть ли введенные слова в словаре. Если нет, выводится сообщение об ошибке, сообщающее пользователю, что конкретное слово неверно. Я попробовал несколько вариантов кода ниже, но не получил желаемых результатов. Это что-то во вложенном цикле while, которое выбрасывает это. Этот код находится на стадии черновика, я должен сделать его более эффективным с точки зрения памяти и т. Д. И привести его в порядок. Я просто заинтересован в том, чтобы заставить его работать первым. Спасибо!

РЕДАКТИРОВАТЬ: немного изменили код в соответствии с советами ниже. Теперь он читает первое слово и говорит, что оно есть в словаре. Затем отображается второе слово, но цикл сканирования словаря не запускается, и программа зависает. Я знаю, что это вложенный цикл while, вызывающий проблему, я просто не могу разобраться с этим!

/*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;
}

1 Ответ

2 голосов
/ 15 декабря 2011

Обычный способ решения этой проблемы - сначала прочитать словарь и построить хеш-таблицу.Затем вы будете читать по одному слову из входного файла и отмечать ошибку, если слово не существует в хеш-таблице.

...