Compter le nombre d'espace

Fermé
dordouf - 25 oct. 2012 à 18:55
 Utilisateur anonyme - 26 oct. 2012 à 15:02
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

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
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 jeudi 15 mars 2012 Statut Membre Dernière intervention 16 mars 2013 2
25 oct. 2012 à 20:58
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
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
26 oct. 2012 à 14:39
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
26 oct. 2012 à 15:02
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