2011-12-14 5 views
-1

Я пишу программу проверки орфографии, которая будет сравнивать текстовый файл пользователя со словарем, чтобы узнать, находятся ли слова, которые они ввели, в словаре. Если нет, выводится сообщение об ошибке, чтобы сообщить пользователю, что конкретное слово неверно. Я пробовал несколько вариантов кода ниже, но не получал желаемых результатов. Это что-то во вложенном цикле, которое его выбрасывает. Этот код находится на черновом этапе, я должен сделать его более эффективным с точки зрения памяти и т. Д. И убрать его. Я просто заинтересован в том, чтобы он работал первым. Благодаря!Сравнение двух текстовых файлов - программа проверки орфографии в 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; 
} 
+0

Пожалуйста, не закрывайте. У этого парня талант. – wildplasser

+0

Спасибо за вход wildplasser. Я получаю то, что вы говорите повторно, а не сканирование до конца файла, но у меня есть разрыв под истинным strcmp. Будет ли этого недостаточно, чтобы остановить сканирование в EOF? – adohertyd

+0

А, я вижу. Хорошая причина для перемещения второго блока 'strcmp()' где-то в другом месте. – wildplasser

ответ

2

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

+0

Что такое хэш-таблица? Я новичок в C, мы пока не занимались этим. Формат моей программы должен быть таким же, как и в моем коде. – adohertyd

+0

Хэш-таблица не является особенностью C. Его структура данных. Почему формат исправлен? – jman

+0

Поскольку мы еще не рассматривали структуры данных или что-то еще подобное. Я новичок в C, поэтому эта программа должна быть C-специфичной. Спасибо за вход, я не сбиваю с толку ваше предложение, я просто не могу его использовать. – adohertyd

Смежные вопросы