Search code examples
cfilegetc

Test the space in a string from a file


I am trying to test if the character in a file.txt is a space ' ' or not using this code:

char *Appartient (FILE *f, char *S)
{
    int i = 0, nbdechar = 0, nbocc = 0, PosdePremierChar, space = 0;
    char c;
    while ((c = getc(f)) != EOF) {
        PosdePremierChar = ftell(f);
        if (c == S[0]) {
            nbdechar = 0;
            for (i = 1; i < strlen(S); i++) {
                c = getc(f);
                if (c == S[i]) {
                    nbdechar++;
                }
            }
            if (nbdechar == strlen(S) - 1) {
                nbocc++;
            } else {
                rewind(f);
                fseek(f, PosdePremierChar - 1, SEEK_CUR);
                while ((c = getc(f)) != ' ');
            }
        } else {
            while ((c = getc(f)) != ' ') {
                space++;
            }
        }
    }
    printf("\n Le nb d'occurence est %d", nbocc);
    if (nbocc == 0) {
        return "false";
    } else {
        return "true";
    }
}

but a weird symbol 'ے' appear like a garbage when I inspect the variable 'c' in my debugger:

screenshot of debugger showing that variable 'c' has the value -1, which is interpreted as the character 'ے'

What is wrong


Solution

  • Modify your code like this, trace it and you might become enlightened regarding the relation between what getc() returns and how this correlates to chars:

    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main(void)  
    {
      int result = EXIT_SUCCESS;
    
      FILE * f = fopen("test.txt", "r");
      if (NULL == f)
      {
        perror("fopen() failed");
        result = EXIT_FAILURE;
      }
      else 
      {
        int result = EOF;
    
        while (EOF != (result = getc(f)))
        {
          char c = result;
    
          printf("\n%d is 0x%02x is '%c'", result, result, c);
          if (' ' == c)
          {
            printf(" is space ");
          }
        }
    
        printf("\nread EOF = %d = 0x%x\n", result, result); 
    
        fclose(f);
      }
    
      return result;
    }