Compter le nombre d'espace

dordouf -  
 Utilisateur anonyme -
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. gnugo
     
    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.
    0
  2. dordouf
     
    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);
    }
    0
  3. leam19 Messages postés 93 Statut Membre 2
     
    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 ^^
    0
    1. dordouf
       
      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.
      0
  4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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 :-).
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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);
    0