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

A voir également:

5 réponses

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
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
leam19 Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   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
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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