Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Re: Traduction d'un code en C

4 réponses
Avatar
Ranny
Bonsoir
merci pour la reponse
Ranny wrote

> Bonjour à tous et merci pour vos réponses qui m'ont permis d'avancer
> D'ailleurs j'ai bien été obligé de partir de zéro :
> Questions

> 1/Voila donc j'ai toujours mon fichier texte.Et je veux verifier qu
> si une ligne commence par "ouistiti", je fais ainsi ==> i
> (!strncmp(ligne, "ouistiti", 8)
>
> /* La ligne commence bien par ouistiti *
>
> Est-ce que cela convient ?
C'est à peine passable
. Il faut être sûr que ligne + 7 est adressable, ou au moins que l
ligne fasse 8 ou 9 bytes
. Mettre 8 de manière littérale n'est pas bon, parce que si tu change
'ouistiti' par 'chimpanzé', il va falloir répercuter la modif un pe
partout, il y a des dolutions pour simplifier la vie
J'ai cherché et je n'ai pas trouvé ces fameuses solutions?

Autre question
Je veux ecrire dans le fichier la valeur d'une variable, je fais ainsi mais ca va pas
fputs(("language=%ld\n", lang), fOut)
Merc

--
Ranny

-----------------------------------------------------------------------
Voir theme: http://www.frbox.net/viewtopic-531955.htm

Envoyé de http://www.frbox.ne

4 réponses

Avatar
Harpo
Ranny wrote:


if
(!strncmp(ligne, "ouistiti", 8))
{
/* La ligne commence bien par ouistiti */
}
Est-ce que cela convient ??


C'est à peine passable.
. Il faut être sûr que ligne + 7 est adressable, ou au moins que la
ligne fasse 8 ou 9 bytes.
. Mettre 8 de manière littérale n'est pas bon, parce que si tu changes
'ouistiti' par 'chimpanzé', il va falloir répercuter la modif un peu
partout, il y a des dolutions pour simplifier la vie.


Essaie de quoter correctement, on ne discerne pas ce que tu écris du
message auquel tu réponds.

J'ai cherché et je n'ai pas trouvé ces fameuses solutions??


#define SINGE "ouistiti"
#define SINGE_SIZE ( sizeof(SINGE) - 1 )

...
if ( ! strncpm( ligne, SINGE, SINGE_SIZE ) )
Mais je pense que strcmp() aurait fait l'affaire.


Autre question:
Je veux ecrire dans le fichier la valeur d'une variable, je fais ainsi
mais ca va pas? fputs(("language=%ldn", lang), fOut);
Merci


("langage=%ldn", lang)
n'est pas une expression du langage qui donne ce que tu imagines, ce
n'est pas le langage proprement dit qui peut faire la conversion et la
substitution de lang dans la chaîne.
Des fonctions prévues pour peuvent le faire, ici tu aurais du utiliser
fprintf()
fprintf( fOut, 'langage=%ldn", lang );

--
http://harpo.free.fr/


Avatar
Antoine Leca
En news:43e1b7a3$0$19710$, Harpo va escriure:
Mais je pense que strcmp() aurait fait l'affaire.


J'y ai pensé aussi, mais je n'ai pas trouvé.
Le problème c'est qu'après avoir parcouru tout le ouistiti, avec strcmp() il
n'y a pas de moyen de dire que c'est bon, on s'arrête là, cela ne nous
intéresse pas de savoir si le caractère qui suit le ouistiti soit
(strcmp() retourne 0) ou quoique ce soit d'autre (strcmp() retourne une
valeur positive...

<DIGRESSION pour_débutant="non">
En fait il y a une fonction qui fait cela (à condition toutefois qu'il n'y
ait pas d'espace dans le mot cherché, ou bien que l'on ne s'intéresse pas à
la concordance de leur nombre): c'est sscanf(src, "ouistiti").
Mais il y a deux inconvénients majeurs : le premier, c'est que scanf() est
généralement une mauvaise idée, tant à cause des possibilités d'erreurs de
manipulation, que par les multiples possibilités de bogues présentes dans
les implémentations. Le second, c'est que sscanf(src, "ouistiti") tel quel
retourne toujours 0, ce qui n'est pas passionnant : il faut écrire un truc
du genre
int longlue;
/* ... */
if( sscanf(src, "ouistiti" "%n", &longlue) == 1 )
/* OK, on a lu tout le ouistiti */

ce qui est d'une toute autre complexité, même si on récupère gratuitement au
passage la taille du ouistiti, qui équivaut à la position de ce qui suit
(src+longlue).
</DIGRESSION>


Antoine

Avatar
Harpo
Antoine Leca wrote:

En news:43e1b7a3$0$19710$, Harpo va escriure:
Mais je pense que strcmp() aurait fait l'affaire.


J'y ai pensé aussi, mais je n'ai pas trouvé.
Le problème c'est qu'après avoir parcouru tout le ouistiti, avec
strcmp() il n'y a pas de moyen de dire que c'est bon, on s'arrête là,
cela ne nous intéresse pas de savoir si le caractère qui suit le
ouistiti soit (strcmp() retourne 0) ou quoique ce soit d'autre
(strcmp() retourne une valeur positive...


Ok, tu as raison sur ce point, disons que je n'étais pas réveillé ce
matin.


<DIGRESSION pour_débutant="non">


Je dirais même 'NON!'
(...)

int longlue;
/* ... */
if( sscanf(src, "ouistiti" "%n", &longlue) == 1 )
/* OK, on a lu tout le ouistiti */

ce qui est d'une toute autre complexité, même si on récupère
gratuitement au passage la taille du ouistiti, qui équivaut à la
position de ce qui suit (src+longlue).


Cela ppurrait être tentant d'utilise cela pour scanner, mais je continue
à dire 'non'.

--
http://harpo.free.fr/


Avatar
Emmanuel Delahaye
Je veux ecrire dans le fichier la valeur d'une variable, je fais ainsi mais ca va pas?
fputs(("language=%ldn", lang), fOut);


Ben non. Tu n'as donc pas de livre de C ? fprintf()...

--
A+

Emmanuel Delahaye