如何将文件中的字符存储到数组中

时间:2016-09-27 23:23:15

标签: c

请对此我遇到很多麻烦。我有一个包含大量字符的文本文件,我需要读取每个字符,如果它是字母表的字母,那么我需要将它存储在一个数组中。

到目前为止,我只是尝试将字符放在我的数组中,无论它是否是字母字符,但我的fscanf没有读取任何内容。

这是我的代码

    char j = ' ';
    int i;

    FILE *file = fopen("text.txt", "r");
    for(i = 0; i < 10; i++)
    {
      fscanf(file, " %c ", &j);
      printf(" %c\n", j); //So I could see if j got anything BUT I'M NOT :(
      if((j >= '97' && j <= '122') || (j >= '65' && j <= '90'))
      {
         fscanf(file, "%c", &array[i]);
      }
    }

fclose(file);
return 0;

我的结果?没有什么只是空白。是的,我的文本文件与我的.c文件在同一文件夹中

帮助

我的问题:我的fscanf实际上并没有读任何东西。我的j变量永远不会改变!由于下面的助手我现在可以解决的ASCII问题,但是fscanf是我阻止我的进步的主要问题

2 个答案:

答案 0 :(得分:2)

主要问题:

/* WRONG */
if((j >= '97' && j <= '122') || (j >= '65' && j <= '90'))

/* CORRECT */
if((j >= 97 && j <= 122) || (j >= 65 && j <= 90))

换句话说,表达式'A''\0x41'65在此上下文中都是等效的。

但'65'不是。它表示字符“ASCII 6”和“ASCII 6” - 这样的字符不存在:(

PS: 正如Bluepixy所说,isalpha()是你的朋友。我建议您在代码中替换isalpha()

答案 1 :(得分:0)

您可以在此处调整代码,并通过isalnum()函数检查字符

char *readFileCharacter(char *fileName) {
    FILE *file = fopen(fileName, "r");
    int c;
    char *code;
    size_t n = 0;

    if (file == NULL) 
           return NULL; //impossible to open file

    // Get the size of the file to allocate correctly the array of char
    fseek(file, 0, SEEK_END);
    long f_size = ftell(file);
    fseek(file, 0, SEEK_SET);
    code = malloc(f_size);

    while ((c = fgetc(file)) != EOF) {
        if ( isalnum(c) ) // check if alphanum
          code[n++] = (char)c;
    }
    fclose(file);
    code[n] = '\0';        

    return code;
}