2014-09-24 5 views
1

Я пытаюсь создать программу проверки орфографии, которая берет входной файл и гарантирует правильность каждого слова путем поиска через файл словаря. Проблема я столкнулся в том, что, когда я пытаюсь взять каждое слово разделенного пробелов из входного файла и поместить его в char [] слово с " по какой-то причине печатичтение некоторых символов с помощью fgetc

H0 
i1 
c0 
h1 
r2 
i3 
s4 
!5 
â0 
1 
2 
h3 
o4 
w5 
w6 
â7 
8 
9 
a0 
r1 
42 
e3 
y0 
o1 
u2 
.3 

целых мой индекс

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include "dict.h" 

int main(int argc, char *argv[]) { 
    FILE *fdict,*input; 
    int i; 
    char ch; 

/* the biggest posible word is 30 plus a possible of two " or ' characters and the null character. so the limit of the array is 33*/ 
    char norm[33]; 

    if (argc < 3) /* argc should be 3 for correct execution*/ 
    { 
     fprintf(stderr,"1 or 2 Files were missing."); 
     exit(1); 
    } 

    if (argc > 3){ 
     fprintf(stderr,"too many Arguments"); 
     exit(1); 
    } 

    /* We assume argv[1] and agrv[2] are filenames to open*/ 
    fdict = fopen(argv[1], "r");/* file pointer for the dictionary file*/ 
    input = fopen(argv[2], "r");/*file pointer for the input file*/ 

    /* fopen returns NULL on failure */ 
    if (fdict == NULL){ 
     fprintf(stderr,"Could not open file: %s\n", argv[1]);/*checks to make sure the dictionary file can be opened*/ 
     exit(1); 
    } 

    if (input == NULL){ 
     fprintf(stderr,"Could not open file: %s\n", argv[2]);/*checks to make sure the input file can be opened*/ 
     exit(1); 
    } 
      /* Read one character at a time from file, stopping at EOF, which 
       indicates the end of the file. Note that the idiom of "assign 
       to a variable, check the value" used below works because 
       the assignment statement evaluates to the value assigned. */ 
    while ((ch = fgetc(input)) != EOF) {   

     char word[33] = "";/* resets the array*/ 

     for (i = 0; !isspace(ch) ; i++){ 
      word[i] = ch; 
      printf("%c%d\n",ch,i);/* checking to see what is wrong with the index*/ 
      ch = fgetc(input); 

     } 


    } 
    fclose(fdict); 
    fclose(input); 

    return 0; 

} 

мой вход выглядит следующим образом:

Hi chris! “howw” are you. 
+1

Примечание: 'char ch;' должен быть 'int ch'', чтобы отличать' EOF' от другого 'char '. – chux

+3

Вы используете какой-то текстовый процессор? Не. Используйте редактор программиста. –

ответ

4

" не то же самое, как ни . (3 разных кавычки). На основе разных кодировок эти 3 символа используют различные последовательности char, чтобы представить их, но код только печатает один char за раз.

Предложите только использовать знак цитаты simpe ".

Простой текстовый редактор программиста. Избегайте текстового процессора, который может вводить знаки кавычки, отличные от ASCII, до тех пор, пока ваш код не будет готов к этому (@nm)