2014-09-24 54 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

注:'字符CH;'应该是'INT CH;'从其他字符''区分EOF' '。 – chux 2014-09-24 15:55:04

+3

你使用某种文字处理器吗?别。使用程序员的编辑器。 – 2014-09-24 16:00:04

回答

4

"是不一样的也不。 (3个不同的引号)。根据不同的编码,这3个字符使用各种序列char来表示它们,但代码一次只打印一个char

建议只使用simpe引号"

一个简单的或程序员的文本编辑器会做。避免字处理器可以在非ASCII引号身上,直到你的代码是准备好了(@nm)