Compter le nombre d'espace

Bonjour tout le monde,

Je débute en programmation et j'ai besoin de vous.
Le problème, j'ai un fichier qui se nomme test.txt qui se trouve dans /toto/fichier , je dois compter le nombre d'espace dans ce fichier.

j'ai fait un petit programme qui m'affiche les caractères que je souhaite, mais quand je fais une condition sur l'espace ça plante / if (caract[i] == ""){ après j'incrémente i }.

J'ai lu qu'il fallait mettre le caractère ascii de l'espace, donc j'ai mis: if (caract[i] == 20){}

Ca compile mais ça marche pas trop.

Si vous voulez voir le code, dites le moi je le mettrai

Merci beaucoup

5 réponses

  1. Salut,
    Oui ce serait plus simple que tu mettes ton code pour voir ce qui ne va pas.

    Je pense qu'il te faut un autre entier que i pour compter le nombre d'espaces, enfin ça dépend de ton code.
    1. Merci de m'avoir répondu, voici mon code

      #include <stdio.h>
      #include <fcntl.h>
      #include <stdlib.h>
      #include <unistd.h>

      int main()
      {
      int fd = 0;
      char ligne[200];
      int nb_car_lus = 0;
      int i = 0;
      int count = 0;

      fd = open ("/root/script_c/perso/test.txt",O_RDONLY);

      if (fd > 0)
      {
      printf("Ouverture du fichier reussie \n\n");
      }
      do
      {
      nb_car_lus = read(fd,ligne,199);
      i = i+1;
      }
      while (nb_car_lus > 0);
      ligne[i]='\0';
      i=0;
      while (count != '\0')
      {
      if (ligne[count] == 20) // 20 espace en ASCII
      {
      i = i+1;
      count = count + 1;
      }
      }
      printf("\n\n\n Blancs : %d", i);
      close(fd);
      return(0);
      }
      1. Tu fait un split, puis tu compte le nombre d'index du tableau -1
        Je ne fait pas de C, mais j'espére que d'autres t'aideront ^^
        1. Merci c'est gentil, je suppose que split est une fonction, je ne l'a connais pas je vais me documenter dessus, mais je dois utiliser que les fonctions open et read.
      2. Contributeur
        Pourquoi ne pas utiliser des fonctions standards ?
        Comme fopen (et non open)
        Comme fread (ou mieux fgets) et non read.
        Ca change pas mal de chose.
        Pour le code ascii, tu peux te contenter de mettre ' ' (c'est plus intelligible)

        do
        {
        nb_car_lus = read(fd,ligne,199);
        i = i+1;
        }
        Il y aura seulement 1 boucle. Donc i vaudra 1.
        Donc, tu ne gardes que le premier caractère.

        Dans un premier temps, je te conseille de tout revoir :
        fopen, fgets, fclose.

        Ensuite, reposte ton nouveau code (en utilisant les balises "code" à droite du bouton souligné). Et on reverra :-).
        1. Bonjour

          En plus des remarques de fiddy...

          Ton test initial était mauvais car en faisant
          if (caract[i] == "")
          tu comparais un caractère et une chaîne (vide, de surcroît !)
          Tu aurais dû écrire
          if (caract[i] == ' ')

          Maintenant que tu essayes avec le code ASCII, tu te trompes encore. Le code de l'espace c'est 20... en hexa, soit 32 en décimal. tu peux faire
          if (caract[i] == 0x20)
          ou
          if (caract[i] == 32);